如何将ENV参数传递给Rake Task

时间:2014-10-14 02:48:03

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

我试图从另一个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|

1 个答案:

答案 0 :(得分:0)

我认为您可以在调用之前设置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
但是,我更喜欢前一个。