2015/05/04

[ruby] rails runnerで引数を拾う

railsでサイトを構築した際に、cronに登録する処理をrails runnerで書いたのですが、optparseを使用して弊害が出たのでメモ。




引数を綺麗に拾ってくれるoptparse

rubyでコマンドラインツールを作る時に便利なoptparseですが、rails runnerでoptparseを使って引数を拾う場合「-e production」の部分もしっかり仕事してくれるのでエラーが発生しました。
/usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands/runner.rb:53:in `eval': invalid option: -e (OptionParser::InvalidOption)
    from (eval):1:in `<top (required)>'
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands/runner.rb:53:in `eval'
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands/runner.rb:53:in `<top (required)>'
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:64:in `require'
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:64:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

根本的に-eをスルーするやり方は分からないですが、-eもoptparseで定義してやればとりあえずは実行できる模様。
options = {}

OptionParser.new { |o|
  o.banner = "Usage: #{$0} [options]"
  o.on("-e [value]", "未設定") { |v| options[:e] = v }
  o.on("-f", "force") { |v| options[:force] = v }
  o.on("--list", "list") { |v| options[:list] = v }
}.parse!(ARGV.dup)

-e productionなんか拾ってどうすんだって話ですが、こういう事もあるんだということで。


0 件のコメント:

コメントを投稿