3

我正在运行自定义 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 是否被正确设置/读取。我也尝试过在 :environment 依赖声明周围使用和不使用方括号。

附加信息: Rails v3.2.14

更多信息:我已经设置了一个全新的 Rails 应用程序,该脚本在任何环境中都可以正常工作。由于有问题的安装是一个真实的生产环境,我将不得不设置另一个部署并彻底检查它。我找到的更多信息。

4

1 回答 1

6

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

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

# explicitly require model
require 'application_wide_setting'

可以急切地加载整个 rails 应用程序:

Rails.application.eager_load!

但是,您可能对某些初始化程序有疑问(即设计)

于 2013-09-03T03:53:56.820 回答