Ruby on rails 生产任务不';我不认识我的模特

Ruby on rails 生产任务不';我不认识我的模特,ruby-on-rails,model,heroku,rake,cedar,Ruby On Rails,Model,Heroku,Rake,Cedar,当我经营Heroku Bambon时,这从来都不是问题。现在,在Cedar上,每当我试图从服务器上的rake任务中访问我的模型时,我都会出错。这发生在标准的rake任务rake db:seed,以及我自己的定制任务中,其中明确包括:environment。我甚至冗余地这样做: namespace :db do desc "Update db" task :new_seed => :environment do require './Scraped_Data/Games/co

当我经营Heroku Bambon时,这从来都不是问题。现在,在Cedar上,每当我试图从服务器上的rake任务中访问我的模型时,我都会出错。这发生在标准的rake任务
rake db:seed
,以及我自己的定制任务中,其中明确包括:environment。我甚至冗余地这样做:

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 tasks在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
rake中止!
未初始化的常量对象::电影
/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层)in'
/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:在“执行中的块”中
/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:“在调用链中的块中”
/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:“使用调用链调用”
/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:在“顶层的块(2层)”中
/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:在“顶层块”中
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:在“标准异常处理”中
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:88:“顶级”
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:66:在“运行中的块”中
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:在“标准异常处理”中
/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`'
/app/vendor/bundle/ruby/1.9.1/bin/rake:19:in'load'
/app/vendor/bundle/ruby/1.9.1/bin/rake:19:in`'
任务:TOP=>db:new\u seed

我有
线程安全!=true
在我的生产环境中的
config/environments/production.rb中配置

禁用此选项可以解决问题


这里的答案是:提供了一些更多的解释和其他解决方法选项(特别是最后一个链接)

默认情况下,threadsafe set dependency\u loading=false
如果希望在应用程序中启用线程安全,并在任务中访问模型,则需要加载它

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

参考号:


希望这有帮助

我怀疑这是因为另一个原因失败的。。特别是如果你运行“heroku运行控制台”,你能在那里加载“电影”吗?是的,我能。我可以从控制台访问我的所有模型。我刚刚重新检查,电影在heroku运行控制台中运行正常。我有
threadsafe!=true
在我的生产环境中配置。这导致了问题,你知道为什么会发生这种情况吗。我有一个类似的问题@它可能与db操作不是原子操作这一事实有关,因此不是线程安全操作。显然,它们可以通过锁实现线程安全,这就是多个服务器可以接触同一个数据库的方式,但我猜rails抽象了一点,但无法在rake任务中启用该行为。
$rails\u rake\u task
在最新版本的rake或rails中不再定义,但是您仍然可以在Rakefile中手动设置
$rails\u rake\u task=true