2017-03-13 2 views
0

Ich habe eine Rails 5.0.2 app PostgreSQL 9.6 auf Heroku mit folgendem Modell ausgeführt wird:ActiveModel jsonb Attributklasse unterschiedlich auf localhost vs Produktion

create_table "stories", force: :cascade do |t| 
    t.string "title",      default: "", null: false 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.boolean "image_processing" 
    t.jsonb "image_json" 
    t.string "image_file_name" 
    t.string "image_content_type" 
    t.integer "image_file_size" 
    t.datetime "image_updated_at" 
end 

In meiner app, Ich gehe davon aus, dass image_json ist ein Hash. Wenn ich also Story.last.image_json.class anrufe, erwarte ich, dass die Ausgabe immer Hash ist, was in meiner Entwicklungsumgebung gilt. Wenn ich denselben Befehl für die Produktion (Heroku) ausführe, ist die Ausgabe nicht Hash, sondern String. Wie ist das möglich?

auf localhost:

Story.last.image_json.class 
=> Hash 

Auf Produktion:

Story.last.image_json.class 
=> String 

Zuerst dachte ich, dass vielleicht war es, weil ich eine etwas ältere Version von Postgres in der Entwicklung (9.4) als auf der laufenden Produktion , aber das Upgrade beider Postgres-Installationen auf 9.6 hatte keine Auswirkungen.

Ich habe das Problem vorübergehend gelöst, indem ich einfach die Klasse von image_json in meinem Code überprüft habe, bevor ich darauf arbeite, aber das löst mein Problem nicht wirklich.

+0

Haben Sie überprüfen, ob beide Heroku Produktion und Entwicklung Datenbankfeld jsonb-Typ ist, und was ist der Datentyp von Story.image_json? Danke –

+0

Sie sind beide "Jsonb", überprüfte ich. – ACIDSTEALTH

+0

Sorry, ich weiß es wirklich nicht. Ich habe diesen Beitrag gesehen. http://stackoverflow.com/questions/10560394/how-doi-query-using-fields-inside-the-new-postgresql-json-datatype#10560761 –

Antwort

1

Es ist ein Rails 5.0.2 Problem - issue

+0

Gute finden, danke! Hoffentlich veröffentlichen sie das bald als Patch. Angenommen, ich könnte auch nur auf den Meisterzweig zeigen ... – ACIDSTEALTH

Verwandte Themen