ruby スクリプトが失敗したときに、mutt を介してメールを送信する方法を構築していました。次のようになります。
begin
UnknownFunction()
rescue
subject = 'Error'
to_array = ['email@email.com','email2@email.com']
body = "An error occurred:\n#{$!}"
%x[echo "#{body}" | mutt -s "#{subject}" #{to_array.join(",")}]
end
コマンドは次のエラーをスローしていました:
sh: -c: line 1: unexpected EOF while looking for matching ``'
sh: -c: line 2: syntax error: unexpected end of file
私はついにその $ を確認するのに十分なほどよく見ました! 未定義のメソッドの名前の前にバッククォートがあり、その後に一重引用符が続きます:
undefined method `UnknownFunction' for main:Object
コードを掘り下げて、method_missing メソッドの前にバッククォートがあり、その後に一重引用符があることを確認しました。バッククォートは一重引用符にするべきですか、それともその逆ですか? そうでない場合、その背後にある理由は何ですか?
raise NoMethodError, "undefined method `#{mid}' for #{self}", caller(1)