2011-06-22 13 views
4

リモートマシン上でrubyスクリプトを起動して配備されたアプリケーションを更新するrails配備ダッシュボードを構築しました。スクリプトを実行するstdinがrubyソースとして使用されているときにrubyインタプリタに引数を渡す

コマンドは次のようになります。

ssh test-host-02 
    "wget -q -O - http://server/deploy.rb | sudo ruby" 
    > /tmp/update-test-host-02.log 2>&1 

今私はdeploy.rbスクリプトに引数を渡す必要があります。どのようなビルドを展開するか。

引数をdeploy.rbに渡す最も良い方法は何ですか?

答えて

5

ruby​​は標準入力に-という標準入力を指定できるようになっています。これにより、後で引数を渡すことができます。

$ ruby -- - HELLO 
puts ARGV.first # outputs HELLO 

ほとんどの場合、二重ダッシュは必要ありません。

別のオプションは、bashのの<()演算子を使用してファイルディスクリプタにwgetコマンドの出力をオンに使用することです:私がテストしていない

"wget -q -O http://server/deploy.rb && sudo ruby deploy.rb -p 1 --another parm" 

$ ruby <(wget -O - http://example.com/deploy.rb) option1 option2 ... 
+0

優秀!先端に感謝します。私はルビーのマンページがこれをカバーしていないことに驚いています。 –

2

私はwgetラインを変更したいですRubyの呼び出しをパイプではなくチェーンにすることが考えられます。

+1

'sudo ruby​​ <(wget -q -O - http://server/deploy.rb)-p 1 --another param'は何らかの理由でdeploy.rbをディスクに保存したくない場合にも動作します。つまり、配管は私のために働く(おそらく私が気づいていないいくつかの欠点がある)。 – cam

+0

+1 @cam、良いアイデア。私はあなたの答えにそれを追加することをお勧めしたいと思います。 :-) –

関連する問題