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

oco*_*odo 3 ruby rake ruby-on-rails rake-task

我正在运行自定义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
Run Code Online (Sandbox Code Playgroud)

production环境中运行任务时,ApplicationWideSetting模型报告为未定义 .但是,运行在其它环境(即任务时development,staging,test.)任务运行正常.

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

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

注意:我运行任务

puts Rails.env 
Run Code Online (Sandbox Code Playgroud)

要检查shell环境var RAILS_ENV是否正确设置/读取.我也尝试过:环境依赖声明周围有和没有方括号.

其他信息: Rails v3.2.14

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

oco*_*odo 6

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

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

# explicitly require model
require 'application_wide_setting'
Run Code Online (Sandbox Code Playgroud)

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

Rails.application.eager_load!
Run Code Online (Sandbox Code Playgroud)

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