cronジョブとしてRubyスクリプトを実行する際の問題

cronジョブとしてRubyスクリプトを実行する際の問題

cron ジョブとして実行したい Ruby スクリプトがあります。Linux マシンのコマンド プロンプトで実行すると、問題なく実行されます。しかし、同じスクリプトを cron ジョブを使用して実行すると失敗します。

文字列のエンコードで次のエラーが発生します。cron ジョブとして実行しているときにのみエラーが発生するのはなぜかわかりません。また、crontab でシェルを /bin/bash に設定しましたが、これはコマンド プロンプトと同じシェルです。

私が受け取ったエラーは

`encode' 内: US-ASCII では "\xE2" (Encoding::InvalidByteSequenceError)

エラーの原因となるコード行は

split.encode('utf-8).split(some_str)

答え1

エラー メッセージは、環境で言語として US-ASCII が設定されておりcrontab、そのような言語では文字列 "\xE2" が存在しないことを示しています。これは、文字列が ASCII-8 ビットでエンコードされているため、UTF-8 に変換する必要があることが原因であると考えられます。

カットアンドペーストを行うとよく起こることですが、文字列が目に見えない文字によって汚染されている可能性があります。

以下を適用する前に文字列を操作すると、問題は解決するはずです。

  new_str = some_str.encode('utf-8', 'binary', :invalid => :replace, :undef => :replace, :replace => '')

関連情報