我试图从另一个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|
答案 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
但是,我更喜欢前一个。