2012-11-26 44 views
1

我有一個一次性腳本,用於將一些數據加載到我的應用程序的數據庫中。在Heroku上運行的Ruby腳本的「未知屬性」

這是一種大十歲上下,所以我在這裏gist'd它:https://gist.github.com/097fb5a30ce84522077a

代碼爲完美針對本地Postgres的情況下我的本地機器上執行時書面作品(甚至遠程實例),由DATABASE_URL環境變量指定。

但是,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從服務器(curl http://blah.com/profiles.ini > profiles.ini
  • 運行腳本(ruby importprofiles.rb

爲什麼我拉下我的生產profiles.ini在Heroku上爲本地工作的代碼獲取未知屬性錯誤?

+0

剛剛更新了schema.rb的要點。我只有兩個遷移設置,他們都成功運行,我的本地數據庫也是PostgreSQL。 如果這一切都很有幫助,我已經得到完整的代碼在http://github.com/Karunamon/rbreibot –

回答

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"定義在profiles表命名爲owner列,但你需要一個owner_id列。

也許你做了一個手動alter table重命名開發環境中的列。或者,也許這是你第一次沿着這條代碼路徑走。

在任何情況下,您都需要遷移以將profiles.owner重命名爲profiles.owner_id。或者,由於您剛剛開始使用,您可以手動編輯schema.rb以重命名列並重建您的Heroku數據庫。如果您沒有任何數據需要擔心,我只需手動修補schema.rb並重新開始。

+0

就是這樣!我顯然需要更好地標記我的數據庫的狀態;真的是一個愚蠢的錯誤:) 非常感謝! –