2012-03-22 63 views
7

當我運行Heroku Bamboo時,這從來都不是問題。現在,在Cedar上,每當我嘗試從服務器上的rake任務中訪問我的模型時,都會收到錯誤。這發生在rake db:seed,一個標準的rake任務,以及我自己定製的任務中,明確包括:環境。我甚至這樣做冗餘:生產耙子任務不識別我的模型

namespace :db do 
    desc "Update db" 
    task :new_seed => :environment do 
    require './Scraped_Data/Games/code/column-headers.rb' 
    require 'csv' 
    require 'net/http' 
    require './config/environment.rb' 

    # code here... 

    end 
end 

我找不到任何其他地方提到這個問題,所有這些任務在開發中完美運行。感謝您的任何見解,這裏是完整的錯誤消息rake任務儘快吐出來,因爲他們遇到雷在Heroku上的模型:

rake aborted! 
uninitialized constant Object::Movie 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/ext/module.rb:36:in `const_missing' 
/app/lib/tasks/new_seed.rake:187:in `block in load_scraped_data' 
/app/vendor/bundle/ruby/1.9.1/gems/rest-open-uri-1.0.0/lib/rest-open-uri.rb:37:in `open' 
/app/vendor/bundle/ruby/1.9.1/gems/rest-open-uri-1.0.0/lib/rest-open-uri.rb:37:in `open' 
/app/lib/tasks/new_seed.rake:148:in `load_scraped_data' 
/app/lib/tasks/new_seed.rake:550:in `block (2 levels) in <top (required)>' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain' 
/usr/local/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>' 
/app/vendor/bundle/ruby/1.9.1/bin/rake:19:in `load' 
/app/vendor/bundle/ruby/1.9.1/bin/rake:19:in `<main>' 
Tasks: TOP => db:new_seed 
+1

我懷疑這是失敗的原因不同。特別是如果你運行「heroku運行控制檯」可以加載「電影」那裏? – 2012-03-22 19:11:28

+0

是的,我可以。從控制檯訪問我的所有模型我沒有問題。我剛剛重新檢查,並且電影從'heroku run console'正常工作。 – 2012-03-22 19:13:48

+2

我有'線程安全! = true'在我的生產環境中配置。這導致了這個問題。 – 2012-03-22 20:48:13

回答

20

默認線程設置dependency_loading =假
如果你想使你的應用程序線程,並訪問您的模型在你的任務中,你需要加載它。

# Enable threaded mode 
config.threadsafe! 
config.dependency_loading = true if $rails_rake_task 


參考:http://nowhereman.github.com/how-to/rails_thread_safe/

希望這有助於!

+0

'$ rails_rake_task'在最近版本的rake或rails中不再定義,但是您仍然可以在Rakefile中手動設置'$ rails_rake_task = true'。 – 2014-11-19 18:28:09