2013-03-27 72 views
1

會是怎樣流媒體文件的內容網頁的最簡單的方法,因爲它得到更新。內容傳輸到軌道視圖

我目前有一個.txt文件,它在腳本運行時不斷更新,我希望在更新用戶時在頁面上顯示該文件。

有沒有一個簡單的寶石或技術來實現這一目標?還是有一個很好的純Ruby方法?

我的第一個想法是使用某種AJAX請求來返回文件的差異,但我覺得這將是一個不好的方法。

+0

赫姆,你想從.txt文件更新的網頁表單字段的值? – 2013-03-27 17:26:05

+0

我沒有一種形式,現在只是一個簡單的div。我希望它始終包含文件中的信息,即使它發生變化。讓我知道我是否可以提供進一步的信息。 – ardavis 2013-03-27 17:27:16

+0

好的!但是你想更新你所說的網頁,對吧? – 2013-03-27 17:29:12

回答

2

我用Celluloid's Reel by Tony Arcieri來完成這個。

我在後臺運行,這(在這一部分獲得了很多的幫助下Adam Dalton):

my_reel.rb

require 'reel' 

CONNECTIONS = [] 
Reel::Server.supervise("0.0.0.0", 5000) do |connection| 
while request = connection.request 
    case request 
    when Reel::Request 
     puts "Client requested: #{request.method} #{request.url} #{request.body}" 
     CONNECTIONS.each do |c| 
     c << request.body 
     end 
     request.respond :ok, 'YES! YOU GOT IT!' 
    when Reel::WebSocket 
     puts "Client made a WebSocket request to: #{request.url}" 
     CONNECTIONS << request 
     break 
    end 
end 
end 

sleep 

然後我寫了一個命令行腳本來發送POST請求到Reel服務器。有很多的幫助,從Writing Ruby Scripts That Respect Pipelines by Jesse Storimer

〜/斌/ serve_it_up

#!/usr/bin/env ruby 

require 'httparty' 

ARGF.each_line do |line| 
    output_line = line.chop 
    HTTParty.post 'http://localhost:5000', body: output_line                                 
end 

然後,使其工作,我的Rails應用程序使用Sidekiq(bundle exec sidekiq),並在後臺運行一個腳本單擊按鈕時,它發送輸出到一個文件,output.txt。所以我運行一個強制尾部並將其輸出到我的命令行腳本中。

tail -f output.txt | serve_it_up 

在我的web應用程序,我有一些JavaScript(的CoffeeScript在這種情況下)掛接到網絡插座,並把頁面上的輸出:所以任何時間都output.txt的

connection = new WebSocket('ws://localhost:5000') 

connection.onmessage = (event) -> 
    $('#prompt').append(event.data + '<br/>') 
    prompt = document.getElementById('prompt') 
    prompt.scrollTop = prompt.scrollHeight 

的變化,它會不會從tail -f輸出,並把它放在網頁瀏覽器。我也風格的#prompt DIV具有有限的高度,我把它一直滾動至底部。

這裏是它的風格:

#prompt { 
    font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; 
    height: 200px; 
    overflow: auto; 
} 
0

你可以考慮使用像王菲或寶石private_pub(這讓王菲通道專用),它允許您利用網絡插座或長輪詢的新數據推送到客戶端。 Github頁面上還有很多文檔,還有RailsCast。

在您的應用或腳本中,您可以發佈到服務器,將新數據推送到所有訂閱的頻道。

+0

謝謝你,我會看看,並根據結果更新你的結果。 – ardavis 2013-03-27 17:37:38

+0

@ardavis你是怎麼做到的? – chrisbulmer 2013-03-28 16:32:52