【问题标题】:How to pass ENV argument to Rake Task如何将 ENV 参数传递给 Rake Task
【发布时间】:2014-10-14 02:48:02
【问题描述】:

我正在尝试从另一个 rake 任务中调用另一个 rake 任务。但是,我尝试调用的任务接受ENV 参数,而不是args。我要调用的文件在这里:https://github.com/elasticsearch/elasticsearch-rails/blob/master/elasticsearch-rails/lib/elasticsearch/rails/tasks/import.rb

我宁愿不重写 import.rb 所以我试图用它来调用它

Rake::Task["elasticsearch:import:model"].invoke("CLASS='User' SCOPE='active' FORCE=y")

但是,由于import.rb 使用了ENV 参数,所以没有传入参数。有没有办法可以传递 ENV 参数?这是 import.rb 中使用 ENV 参数的摘录。

  total_errors = klass.__elasticsearch__.import force:      ENV.fetch('FORCE', false),
                              batch_size: ENV.fetch('BATCH', 1000).to_i,
                              index:      ENV.fetch('INDEX', nil),
                              type:       ENV.fetch('TYPE',  nil),
                              scope:      ENV.fetch('SCOPE', nil) do |response|

【问题讨论】:

  • 有机会试试答案吗?

标签: ruby-on-rails ruby-on-rails-3 elasticsearch rake


【解决方案1】:

我认为您可以在调用之前设置 ENV,例如

namespace :importer do 
    task :userimport do 
        ENV['CLASS']='User' 
        ENV['SCOPE']='active' 
        ENV['FORCE']=y
        Rake::Task["elasticsearch:import:model"].invoke
    end
end

或者,只需使用 system() 方法,如下所示:

namespace :importer do 
    task :userimport do 
      system("rake environment elasticsearch:import:model CLASS='User' SCOPE='active' FORCE=y")
    end
end

不过,我更喜欢前者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2011-07-05
    相关资源
    最近更新 更多