2017-05-03 108 views
0

大家都知道,当一些rake任务启动时,下列步骤发生:在耙任务使用运行Rails应用程序实例

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

  2. 然后耙任务运行

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

在我运行的应用程序,我有一个类的实例变量

class User 
    @some_flag = false 

    class << self 
    def some_flag 
     @some_flag 
    end 

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

在我耙任务的模型,即定在后台运行,我想更新该变量:

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

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

+0

你能否详细说明一下你为什么要做什么以及为什么要这么做,它可能会在不同的方向上寻找解决方案。 –

+0

如果你想这样做,我认为使用环境变量或在数据库上保存这些标志会更好。 – diofeher

+0

是的,我猜这是不可能的,最好使用数据库 –

回答

0

当我想要更新constantsModel时,我使用了一个小的黑客攻击在这里可能会有帮助。

class Constant 
    SOME_FLAG = false 
end 

当你想更新通过rake任务的标志,你可以:

应用的initializers文件夹内创建一个constants.rb文件

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

希望它可以帮助..

相关问题