Railsでターミナルコマンドが正常に実行されたことを検証する最良の方法は何ですか?
-
05-07-2019 - |
質問
簡単な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
を返します。さらに、 $?
にはエラーステータスが含まれています。
- ただの教訓ですが、
exec
は現在のプログラムをexec
'dに置き換えるため、exec
' dコマンドを検証することはできませんコマンド。したがって、コマンドは検証のためにRubyに戻ることはありません。 - 少なくともcpについては、シェルにドロップするよりも、FileUtilsモジュール(Ruby標準ライブラリの一部)を使用した方がよいでしょう。
- 上記のように、定義済み変数
$?
は、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
所属していません StackOverflow