2017-01-09 3 views
0

引数なしで1つのパラメータを取るレーキタスクを作成したいとします。OptionParser :: MissingArgument

task :mytask => :environment do 
    options = Hash.new 
    OptionParser.new do |opts| 
    opts.on('-l', '--local', 'Run locally') do 
     options[:local] = true 
    end 
    end.parse! 

    # some code 

end 

は、しかし、それはスロー:一方

$ rake mytask -l 
rake aborted! 
OptionParser::MissingArgument: missing argument: -l 

$ rake mytask -l random_arg 
ready 

なぜ?


  • レーキ10.4.2
  • JRubyの1.7.13
+0

OptionParserが最適なプランです'rake'はすでに独自のオプション解析と、最後に' VAR = value'を使ってデータを渡す方法です。ここでは 'LOCAL = 1'のように動作します。例については、[この回答](http://stackoverflow.com/questions/825748/how-to-pass-command-line-arguments-to-a-rake-task)を参照してください。 – tadman

+0

@tadmanフラグとして私のオプションを持っていたいです。 – Viktor

答えて

1

あなたはrake自身の引数から、あなたのタスクの引数を区切る必要があり、このアプローチにコミットしない場合:

rake mytask -- -l 

ここで、--は「主な引数の終わり」を意味し、残りはタスク用です。

あなただけのこれらの特定の引数にトリガするために解析し、あなたの引数を調整する必要があります:それについてはこの道を進んで

task :default do |t, args| 
    # Extract all the rake-task specific arguments (after --) 
    args = ARGV.slice_after('--').to_a.last 

    options = { } 
    OptionParser.new do |opts| 
    opts.on('-l', '--local', 'Run locally') do 
     options[:local] = true 
    end 
    end.parse!(args) 

    # some code 
end 

は、通常は本当に厄介ではなく非常にユーザーフレンドリーなので、あなたはそれを避けることができればと通常はより良い方法をいくつか使用してください。

+0

Rakeは私の議論を無視しています。 – Viktor

+0

それは歴史的にはうまくいくようですが、それは新しいバージョンのレーキではうまくいかないようです。 – tadman

+0

ここでは、これらのカスタム引数に特に焦点を当てたバージョンを追加しました。 – tadman

関連する問題