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 shell ( 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"定义了表中命名的列,ownerprofiles您需要一owner_id列。

也许您做了一个手册alter table来重命名您的开发环境中的列。或者,也许这是您第一次走这条代码路径。

在任何情况下,您都需要迁移以重命名profiles.ownerprofiles.owner_id. 或者,由于您刚刚开始,您可以手动编辑schema.rb以重命名列并重建您的 Heroku 数据库。schema.rb如果您没有任何数据需要担心,我会手动修补并重新开始。

于 2012-11-26T06:05:17.160 回答