Railsでターミナルコマンドが正常に実行されたことを検証する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/171343

質問

簡単なRailsアプリを書いていますが、exec'dコマンドの成功をどのように検証できるのか疑問に思っていました。私が実行している2つのコマンドは、SVN更新と、あるディレクトリから別のディレクトリへのcpです。

役に立ちましたか?

解決

Kernel.system()メソッドを使用する場合コマンドの成功を示すブール値を返します。

result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error

さまざまなルビーシステムコマンドの良い比較がありますこちら

他のヒント

外部コマンドをどのように実行していますか? Rubyの system()関数は、コマンドが成功したかどうかに応じて true または false を返します。さらに、 $?にはエラーステータスが含まれています。

  1. ただの教訓ですが、 exec は現在のプログラムを exec 'dに置き換えるため、 exec ' dコマンドを検証することはできませんコマンド。したがって、コマンドは検証のためにRubyに戻ることはありません。
  2. 少なくともcpについては、シェルにドロップするよりも、FileUtilsモジュール(Ruby標準ライブラリの一部)を使用した方がよいでしょう。
  3. 上記のように、定義済み変数 $?は、 system()またはバックティック演算子によって実行される最後のコマンドのリターンコードを提供します。

SVNの更新については、更新の前後にバージョン番号を確認してください。

svn_start_version = IO.popen("svn info").readlines[4]
`svn update`
svn_end_version = IO.popen("svn info").readlines[4]
if svn_end_version > svn_start_version
  "success"
end

cpについては、コピーされたファイルと等しい元のファイルのファイルサイズチェックを実行できます。

source_file_size = IO.popen("du file1").readlines
`cp file1 file2`
dest_file_size = IO.popen("du file2").readlines
if dest_file_size == source_file_size
  "success"
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top