3

自動化テストの実行中は、テストを中断してしまうため、テスト コンピューターに接続してログ ファイルをチェックしてテストの進行状況を確認することができません。この方法で hdd をマップしてファイルを確認できますが、sinatra アプリケーションに新しい機能を追加したいと考えています。

アプリケーションはテストを実行し、テスト結果を表示するので、sintra 経由でログ ファイルのリアルタイム ストリームを追加したいと考えています。ログ ファイルは 2MB にもなる可能性があるため、ログ ファイルが更新されるたびにファイル全体を送信するのは得策ではないと思いますが、サーバーとクライアントの通信は 99% LAN 経由でのみ行われます。また、ログ ファイルの最新の最終行を Web ブラウザの上部に表示したいと考えています。

誰かがそれを行う方法を提案できますか?

最後の行として受信した行の番号をsinatraに渡す、定期的に行われるajax呼び出しを考えることができます。そして、sinatra は更新があればそれを返します。

アップデート

  • Windows 7 64 ビット
  • ルビー 1.9.3p194 (2012-04-20) [i386-mingw32]
  • シナトラ (1.3.3)
  • sinatra-contrib (1.3.1)
  • シナトラリローダー (1.0)
4

2 に答える 2

3

テスト システムがどのタイプの OS を使用しているかはわかりませんが、それが Linux または Mac OS であれば準備は完了です。そうでない場合、Windows の場合は、telnetd または ssh サーバーと、tail タイプのアプリをインストールすることを強くお勧めします。

SSHおよび/またはTelnetは、基本的にテキストを送信するだけなので、はるかに軽量であるため、特に言及したソリューションでは、HTTP経由でファイルをストリーミングしようとするよりもテストシステムへの影響が少なくなります. セッションとtail -fファイルを開いて、テストを開始するだけです。


Sinatra を使用してソリューションを実装するには、次のような小さなコードから始めます。

#!/bin/env ruby

filepath = ARGV.shift
start_line, num_lines = ARGV.map(&:to_i)

File.foreach(filepath) do |li|
  case 
  when $. < start_line
    next
  when (start_line .. (start_line + num_lines)) === $.
    puts li 
  when $. > (start_line + num_lines)
    break 
  end
end

それを としてディスクに保存しdisplay_file_block.rb、パラメータを指定して呼び出します。

path/to/file start_line lines_to_display

どこ:

  • path/to/file明らかです。
  • start_line表示するファイルの開始行です。
  • lines_to_display表示する行数です。

これらを使用して、表示するファイルを開いて、オフセットから始まる行数を送信できます。

Sinatra で、GET のリクエスト ハンドラを設定します。

get '/tail' do
  path = params['path']
  start = params['start']
  count = params['count']
  `/path/to/display_file_block.rb #{ path } #{ start } #{ count }`
end

content-type応答の をに設定することをお勧めします'text/plain'。Sinatra のサイトでは、その方法を説明しています。

于 2012-12-14T00:50:57.310 に答える
1

「プッシュ」、つまり WebSocket を使用した例を次に示します。

最小の Websock Nodejs テールの例

私の意見では、AJAX ポーリングは、この種の問題に対するダクトテープ型のソリューションです。WebSockets は進むべき道であり、正しく実行してもシステム パフォーマンスにはほとんど影響しません。

「websockets sinatra」をグーグルで検索すると、たとえば最初のヒットのように、Sinatra の同様のソリューションを検索できます。

https://github.com/simulacre/sinatra-websocket

于 2012-12-14T04:22:48.490 に答える