Rake任务无法加载:环境正常

我正在运行自定义rake任务……

namespace :import do desc "Import terms of service as HTML from stdin" task :terms => :environment do html = STDIN.read settings = ApplicationWideSetting.first settings.terms_and_conditions = html if settings.save puts "Updated terms of service" else puts "There was an error updating terms of service" end end end 

production环境中运行任务时,ApplicationWideSetting模型将报告为未定义。 但是,在其他环境(即developmentstagingtest )上运行任务时,任务运行正常。

在所有环境中,在rails控制台中运行该过程都可以。

有谁知道发生了什么,我可以检查的事情?

注意 :我运行任务

 puts Rails.env 

要检查shell环境var RAILS_ENV是否正确设置/读取。 我也尝试了在环境依赖声明周围使用和不使用方括号。

附加信息: Rails v3.2.14

进一步的信息 :我已经设置了一个全新的rails应用程序,该脚本在任何环境下都能正常运行。 由于有问题的安装是一个真实的生产环境,我将不得不设置另一个部署并彻底检查它。 更多信息,因为我找到它。

简而言之,在生产中运行rake任务时,Rails不会急于加载模型(或其他任何东西)。

使用模型的最简单方法是在开始rake任务时require它,它应该按预期工作,在这种情况下:

 # explicitly require model require 'application_wide_setting' 

可以通过以下方式加载整个rails应用程序:

 Rails.application.eager_load! 

但是,您可能会遇到一些初始化程序(即设计)的问题