gpt4 book ai didi

ruby-on-rails - Rails 3 rake 任务在生产中找不到模型

转载 作者:行者123 更新时间:2023-12-03 10:18:42 25 4
gpt4 key购买 nike

我的简单 rake 任务,存储在 lib/tasks/items_spider.rake在开发中运行良好。它所做的就是调用spider!Item模型。

namespace :items do
desc "Spider the web for data, hoorah"
task :spider => :environment do
Item.spider!
end
end

我有 :environment任务作为依赖项,所以一切正常。但是,当我添加 RAILS_ENV=production ,我在本地服务器和生产服务器上都遇到了错误:
$ rake items:spider RAILS_ENV=production --trace
(in /home/matchu/Websites/my-rails-app)
** Invoke items:spider (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute items:spider
rake aborted!
uninitialized constant Object::Item
/home/matchu/.rvm/gems/ruby-1.9.2-preview3@rails3/gems/rake-0.8.7/lib/rake.rb:2503:in `const_missing'
/home/matchu/.rvm/gems/ruby-1.9.2-preview3@rails3/gems/rspec-core-2.0.0.beta.22/lib/rspec/core/backward_compatibility.rb:20:in `const_missing'
/home/matchu/.rvm/gems/ruby-1.9.2-preview3@rails3/gems/rspec-expectations-2.0.0.beta.22/lib/rspec/expectations/backward_compatibility.rb:6:in `const_missing'
/home/matchu/Websites/openneo-impress-items/lib/tasks/items_spider.rake:4:in `block (2 levels) in <top (required)>'
/home/matchu/.rvm/gems/ruby-1.9.2-preview3@rails3/gems/rake-0.8.7/lib/rake.rb:636:in `call'
[...trace of how rake gets to my task...]

这对我来说似乎很奇怪。显然模型没有正确加载。我在 Rails 3.0.3 上,虽然这个应用程序的开发可以追溯到 Rails 3 处于测试阶段时。我该如何调试这个问题?谢谢!

最佳答案

与在生产环境中运行应用程序相反,Rake 任务不会急切地加载整个代码库。您可以在 the source 中看到它:

module Rails
class Application
module Finisher
# ...
initializer :eager_load! do
if config.cache_classes && !$rails_rake_task
ActiveSupport.run_load_hooks(:before_eager_load, self)
eager_load!
end
end
# ...
end
end
end

所以只有 $rails_rake_taskfalse , 应用程序是否会在生产中预先加载。和 $rails_rake_task设置为 true:environment rake 任务。

最简单的解决方法是简单地 require您需要的型号。但是,如果您确实需要在 Rake 任务中加载所有应用程序,则加载它非常简单:
Rails.application.eager_load!

所有这些在开发中工作的原因是 Rails 在开发模式下自动加载您的模型。这也适用于 Rake 任务。

关于ruby-on-rails - Rails 3 rake 任务在生产中找不到模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4300240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com