0

RubyonRailsアプリケーションから実行する必要のあるスクリプトがいくつかあります。スクリプトが適切に機能することを保証するために、私のアプリケーションは、スクリプトから生成されたログファイルの内容を表示/テール化する必要があります。

詳細:私は、一連の接続(ある種のロールアウトメカニズム)を介していくつかのブラックボックスデバイスを構成するスクリプトを期待しています。したがって、たとえば、接続されたデバイスの更新プロセスまたは再起動を監視する必要があります(すべてが正常であることを確認するため)。これは私がログファイルに書き込むものです。

したがって、私はする必要があります:

  1. プロセスを実行し、終了コードを処理します
  2. テールa/いくつかのログファイル(多分Javascriptまたはhtml5?)

どうすればそれができますか?例は本当にありがたいです!

どうもありがとう!

4

1 に答える 1

1

#1の答えは非常に簡単です。つまり、システムコールです。

ret = system('ls','-l')

コマンドの終了ステータスがゼロの場合、retはtrueになります。$?終了ステータスを取得できるProcess::Statusオブジェクトが含まれます

unless system('ls','-l','/a_bogus_dir')
  logger.debug("ls failed with #{$?.exitstatus}")
end

#2の答えはいくつかの方法で行うことができます。ファイルシステム内の特定のファイルの内容を取得し、その内容を返すコントローラーアクションを作成できます。

def get_file_contents
  File.open(params[:file_to_read],"r") { |f| @contents = f.read }
  respond_to |format|
    format.js
  end
end

次に、ファイルget_file_contents.js.erbを作成します。

$('#display_div').html('<%= escape_javascript(@contents) %>');

次に、そのコントローラーアクションを繰り返し呼び出すために、ページ上に何らかのタイマーを作成する必要があります。私はjquery.timersを使用します。タイマーループでは、

$.get('/get_file_contents?file_to_read=public/logfile');

これにより、コントローラーがヒットし、ファイルの内容が取得され、get_file_contents.js.erbが実行されます。これにより、ファイルの現在の内容でdivが更新されます。

ルート/get_file_contentsをroutes.rbに追加する必要があります。

于 2012-04-27T17:59:24.847 に答える