1. ホーム
  2. ルビー

[解決済み】rakeタスクにコマンドライン引数を渡す方法

2022-03-23 01:27:25

質問

複数のデータベースに値を挿入する必要があるrakeタスクがあります。

この値を rake タスクに渡すには、コマンドラインから、あるいは 別の タスクになります。

どうすればいいのでしょうか?

どのように解決するのですか?

オプションと依存関係は、配列の中にある必要があります。

namespace :thing do
  desc "it does a thing"
  task :work, [:option, :foo, :bar] do |task, args|
    puts "work", args
  end
  
  task :another, [:option, :foo, :bar] do |task, args|
    puts "another #{args}"
    Rake::Task["thing:work"].invoke(args[:option], args[:foo], args[:bar])
    # or splat the args
    # Rake::Task["thing:work"].invoke(*args)
  end

end

次に

rake thing:work[1,2,3]
=> work: {:option=>"1", :foo=>"2", :bar=>"3"}

rake thing:another[1,2,3]
=> another {:option=>"1", :foo=>"2", :bar=>"3"}
=> work: {:option=>"1", :foo=>"2", :bar=>"3"}

注:変数 task はタスクオブジェクトで、Rake の内部を知らない/気にしない限り、あまり役に立ちません。

RAILSの注意事項。

Railsからタスクを実行する場合、環境を事前にロードしておくとよいでしょう。 => [:environment] を設定する方法である。 依存 タスクになります。

  task :work, [:option, :foo, :bar] => [:environment] do |task, args|
    puts "work", args
  end