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.
Haben Sie überprüfen, ob beide Heroku Produktion und Entwicklung Datenbankfeld jsonb-Typ ist, und was ist der Datentyp von Story.image_json? Danke –
Sie sind beide "Jsonb", überprüfte ich. – ACIDSTEALTH
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 –