【问题标题】:Rake task failing to load :environment properlyRake 任务无法正确加载:环境
【发布时间】:2013-08-29 09:21:46
【问题描述】:

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

【问题讨论】:

  • rake import:terms RAILS_ENV=production??
  • 我已导出 RAILS_ENV= 生产并将其放入标准输出以确保其设置。无论如何我都会尝试一下,但如果它有效的话会很奇怪......
  • @beck03076 可以预见的是没有效果。
  • 如果从环境中删除括号会发生什么?我通常只看到task :terms => :environment
  • @d_ethier - 我添加了括号以拼命尝试修复它!这最初是在标准生成的 :environment 依赖项中发生的。由于这只是在生产环境下失败,并且 shell 环境变量已成功设置,我猜生产配置中存在导致故障的东西......问题是,我不知道罪魁祸首可能是因为它作为服务器和控制台运行良好。

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


【解决方案1】:

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

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

# explicitly require model
require 'application_wide_setting'

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

Rails.application.eager_load!

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

【讨论】:

  • 非常感谢。这也有帮助,例如当您想使用基类访问不同的 STI 模型时。
猜你喜欢
  • 2012-04-04
  • 1970-01-01
  • 2012-02-13
  • 2015-06-17
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 2017-02-07
  • 2011-10-26
相关资源
最近更新 更多