【问题标题】:Rails uninitialized constant in productionRails 生产中未初始化的常量
【发布时间】:2010-12-22 08:29:59
【问题描述】:

我有一个奇怪的问题。在开发中这个问题不存在,但在生产中 rake 向我抛出这个错误消息“未初始化的常量程序”

“程序”是一个活动记录模型,它就在那里,它在架构文件中,它在 app/model 文件夹中。

我像这样执行它 rake import:xml RAILS_ENV=production.可能是什么问题呢?下面是完整的堆栈跟踪

rake import:xml RAILS_ENV=production --trace
(in /usr/mobloom/www/htdocs/remindertest)
** Invoke import:xml (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute import:xml
rake aborted!
uninitialized constant Program
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2503:in `const_missing'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:92:in `const_missing'
/usr/mobloom/www/htdocs/remindertest/lib/tasks/import_assets.rake:18
/usr/mobloom/www/htdocs/remindertest/lib/tasks/import_assets.rake:9:in `each'
/usr/mobloom/www/htdocs/remindertest/lib/tasks/import_assets.rake:9
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31
/usr/bin/rake:19:in `load'
/usr/bin/rake:19

第 18 行:program = Program.find(:first, :conditions => ['programident = ?', broadcast['PROGRAMME']['PROGRAMME_ID']])

【问题讨论】:

  • 我们可以看看堆栈跟踪吗?
  • 你的任务是什么?可以放在这里吗?

标签: ruby-on-rails passenger rake-task


【解决方案1】:

试试

require 'app/models/program'

或者如果您需要大部分模型

Rails.application.eager_load!

Rake 不会急于加载您的模型。

在这里看到一个很好的解释Rails 3 rake task can't find model in production

【讨论】:

  • 这不是 rails 3,而是 2.3.8,这只是我的 prod 环境中的一个问题,而不是在开发中
【解决方案2】:

您可能忘记了将任务依赖于 :environment。

task :xml => :environment do
  ...code here...
end

已编辑!可能不是正确的答案 用热切的加载看答案。

【讨论】:

  • -1 因为如果您查看发布的日志,您可以看到环境已加载
  • 是的,我意识到这一点,这就是我编辑我的帖子并为你的帖子投票的原因。您希望我删除我的答案并另外给自己投票吗?
  • 感谢您的回答,但正如大卫所说,正在加载环境
猜你喜欢
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多