2012-03-22 7 views
7

私がHeroku Bambooを実行していたとき、これは問題ではありませんでした。さて、Cedarでは、サーバー上のレーキタスク内から自分のモデルにアクセスしようとするたびにエラーが発生します。これは、標準的なレーキタスクであるrake db:seedと、明示的に含まれる自分のカスタム構築タスクで発生します。私は他の場所で、この問題の一切の言及を見つけることができません生産レーキタスクが私のモデルを認識しない

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 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 run console"を実行すると、そこに "Movie"をロードできますか? –

+0

はい、できます。私はコンソールからすべてのモデルにアクセスすることに問題はない。私はちょうど再チェックし、ムービーは 'heroku run console'からうまく動作します。 –

+2

私は 'threadsafe! = true」を設定します。これは、問題を引き起こしました。 –

答えて

20

が設定dependency_loading =偽
をスレッドセーフで提供しますあなたのタスクのモデルをロードする必要があります。

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


のRef .: http://nowhereman.github.com/how-to/rails_thread_safe/

・ホープこのヘルプ!

+0

'$ rails_rake_task'は最近のバージョンのrakeやrailsでは定義されていませんが、手動で' $ rails_rake_task = true'をRakefileに手動で設定することはできます。 –

1

私はconfig/environments/production.rb

を無効に私の本番環境でthreadsafe! = trueを構成していた:任意の洞察力のおかげで、ここでは、すくいタスクは、すぐに彼らはHerokuの上で私のモデルに遭遇したとして吐き出す完全なエラーメッセージです。これは問題を解決します。

答えがここで見つける:rake aborted! uninitialized constant Object::Country, why can't see model?は、あなたのアプリケーションとあなたへのアクセスにスレッドセーフを有効にする場合はデフォルトでいくつかのより多くの説明や他の回避策オプション(特に最後のリンク)

関連する問題