Ruby on rails 如何将ENV参数传递给Rake任务
我试图从另一个rake任务中调用另一个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_
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
不过,我更喜欢前者。有机会尝试一下答案吗?