1

アプリケーションのデータベースにデータをロードするために使用している 1 回限りのスクリプトがあります。

これは一種の大きなものなので、ここで要旨を説明しました: https://gist.github.com/097fb5a30ce84522077a

記述されたコードは、DATABASE_URL 環境変数で指定されているように、ローカル マシン (またはリモート インスタンス) 上のローカル Postgres インスタンスに対して実行するときに問題なく動作します。

ただし、Heroku からは絶対に動作しません。リンクされた ruby​​ スクリプトを実行すると、次のエラーが表示されます。

~ $ ruby importprofiles.rb
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.9/lib/active_record/attribute_assignment.rb:88:in `block in assign_attributes': unknown attribute: owner_id
(ActiveRecord::UnknownAttributeError)

私のワークフローは基本的に次のとおりです。

  • Heroku でアプリを作成する ( heroku create mybot)
  • コードを上に押し上げます ( git commit -m 'initial commit' && git push heroku master)
  • データベースのセットアップ ( heroku run rake db:setup)
  • インスタンスを再起動します ( heroku restart)
  • heroku インスタンスで Bash シェルを呼び出します ( heroku run bash)
  • Curl を使用して、本番用の profile.ini をサーバーから取得します ( curl http://blah.com/profiles.ini > profiles.ini)
  • スクリプトを実行します ( ruby importprofiles.rb)

ローカルで動作するコードに対して Heroku で不明な属性エラーが発生するのはなぜですか?

4

1 に答える 1

2

実際のデータベースと一致しないか、所有者を使用しようとしたことがありませschema.rbん。Profileあなたはこれを持っていますschema.rb

create_table "profiles", :force => true do |t|
  t.string   "title",   :limit => 100
  t.integer  "owner"
  t.datetime "timeset"
  t.string   "whoset"
end

は、テーブルでt.integer "owner"指定された列を定義しますが、列が必要です。ownerprofilesowner_id

おそらくalter table、開発環境で列の名前を変更するマニュアルを作成したでしょう。あるいは、このコード パスをたどったのはこれが初めてかもしれません。

profiles.ownerいずれにせよ、名前を に変更するには移行が必要ですprofiles.owner_id。または、始めたばかりなので、手動で編集schema.rbして列の名前を変更し、Heroku データベースを再構築することもできます。schema.rb心配するデータがなければ、手作業でパッチを当ててやり直します。

于 2012-11-26T06:05:17.160 に答える