0

このirbセッションに話をさせます(ジャンクは省略し....ます)。

マーシャルされたデータを使用してモデルを作成します。user_infoバイナリ列です

irb(main):011:0> p2 = Provider.create(user_info: Marshal.dump(ActiveSupport::HashWithIndifferentAccess.new({foo: 1, bar: 2}))
   (0.7ms)  BEGIN
  SQL (11.6ms)  INSERT INTO "providers" (...."user_info") VALUES (....$9) RETURNING "id"  [.....["user_info", "\x04\bC:-ActiveSupport::HashWithIndifferentAccess{\aI\"\bfoo\x06:\x06EFi\x06I\"\bbar\x06;\x06Fi\a"]]
   (3.6ms)  COMMIT
=> #<Provider id: 98, ..... user_info: "\x04\bC:-ActiveSupport::HashWithIndifferentAccess{\aI\"\bf...", provider_id: nil>

値を確認してください。正しく見えます:

irb(main):013:0> p2.user_info
=> "\x04\bC:-ActiveSupport::HashWithIndifferentAccess{\aI\"\bfoo\x06:\x06EFi\x06I\"\bbar\x06;\x06Fi\a"

悪いことが起こります:ここでそれをリロードすると、値がマーシャルがロードできない形式に完全に変更されます

irb(main):014:0> p2.reload
  Provider Load (5.3ms)  SELECT "providers".* FROM "providers" WHERE "providers"."id" = $1 LIMIT 1  [["id", 98]]
=> #<Provider id: 98, ...., user_info: "x0408433a2d416374697665537570706f72743a3a4861736857...", provider_id: nil>

irb(main):015:0> p2.user_info
=> "x0408433a2d416374697665537570706f72743a3a4861736857697468496e646966666572656e744163636573737b07492208666f6f063a0645466906492208626172063b06466907"

このセッションは、データベースを共有から新しい無料のDev Postgresに最近移動した後、Herokuで実行されています。

これがherokuの問題なのか、postgresの問題なのか、railsの問題なのかはわかりません。奇妙なことに、同じアプリの別のインスタンス(本番環境)を新しいDev Posgressに移行しましたが、この問題は発生していません。私はこれを見つけましが、何年も前に修正されたようです。誰もがこれを経験したことがありますか?

アップデート

結局のところ、SOのこの優れた回答から答えを見つけたようです:https ://stackoverflow.com/a/8541304/65311

4

1 に答える 1

2

Heroku のドキュメントでは、 https ://devcenter.heroku.com/articles/heroku-postgresql#troubleshooting で、新しいデータベースで bytea の変更を構成する方法について説明しています。

于 2012-08-24T00:39:51.467 に答える