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

时间:2013-08-29 09:21:46

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

我正在运行自定义佣金任务......

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应用程序,并且该脚本在任何环境中都能正常运行。由于有问题的安装是一个真实的生产环境,我将不得不设置另一个部署并彻底检查它。我发现它的更多信息。

1 个答案:

答案 0 :(得分:6)

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

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

# explicitly require model
require 'application_wide_setting'

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

Rails.application.eager_load!

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