【问题标题】:Use the running rails application instance in rake task在 rake 任务中使用正在运行的 rails 应用程序实例
【发布时间】:2017-10-01 03:42:06
【问题描述】:

众所周知,当启动一些 rake 任务时,会发生以下步骤:

  1. Rails 加载(新的 Rails::Application 实例初始化)

  2. 然后运行rake任务

因此,对于 rake 任务和 Rails 服务器,Rails 应用程序实例会有所不同。 我想知道,是否可以与 rake 任务或 rails 控制台共享 rails 服务器实例? 如果我想要一个 rake 任务,这可能是一种解决方法,它在运行 rails 服务器应用程序中修改类变量或类实例变量。

在我正在运行的应用程序中,我有一个带有类实例变量的模型

class User
  @some_flag = false

  class << self
    def some_flag
      @some_flag
    end

    def some_flag=(val)
      @some_flag = val
    end
  end
end

在我计划在后台运行的 rake 任务中,我想更新该变量:

namespace :user do
  desc "update flag"
  task update: :environment do
    User.some_flag = ENV['flag']
  end
end

然后在应用程序中使用更新的值

【问题讨论】:

  • 您能否举例说明您想要做什么以及为什么要做什么,它可能会在与您寻找的不同方向上提供解决方案。
  • 如果你想这样做,我认为最好使用环境变量或将这些标志持久化到数据库中。
  • 是的,我想不可能,最好使用数据库

标签: ruby-on-rails rake-task


【解决方案1】:

当我想通过Model 更新constants 时,我使用了一个小技巧,这在这里可能会有所帮助。

在应用程序的initializers 文件夹中创建一个constants.rb 文件:

class Constant
  SOME_FLAG = false
end

当你想通过rake任务更新flag时,你可以:

task update: :environment do
  Constant.const_set('SOME_FLAG', ENV['flag'])
end

希望对你有帮助..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2015-04-15
    • 2015-05-07
    • 2016-03-09
    相关资源
    最近更新 更多