elasticsearch,rake,Ruby On Rails,Ruby On Rails 3,elasticsearch,Rake" /> elasticsearch,rake,Ruby On Rails,Ruby On Rails 3,elasticsearch,Rake" />

Ruby on rails 如何将ENV参数传递给Rake任务

Ruby on rails 如何将ENV参数传递给Rake任务,ruby-on-rails,ruby-on-rails-3,elasticsearch,rake,Ruby On Rails,Ruby On Rails 3,elasticsearch,Rake,我试图从另一个rake任务中调用另一个rake任务。但是,我试图调用的任务接受ENV参数,而不是args。我试图调用的文件如下所示: 我不想重新编写import.rb,所以我尝试用 Rake::Task[“elasticsearch:import:model”]。调用(“CLASS='User'SCOPE='active'FORCE=y”) 但是,由于import.rb使用ENV参数,因此不会传入参数。有什么方法可以传递环境参数吗?下面是import.rb中使用ENV参数的摘录 total_

我试图从另一个rake任务中调用另一个rake任务。但是,我试图调用的任务接受
ENV
参数,而不是
args
。我试图调用的文件如下所示:

我不想重新编写
import.rb
,所以我尝试用

Rake::Task[“elasticsearch:import:model”]。调用(“CLASS='User'SCOPE='active'FORCE=y”)

但是,由于
import.rb
使用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|

我认为您可以在调用之前设置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

不过,我更喜欢前者。

有机会尝试一下答案吗?