2010-03-26 86 views
0

我需要通過命名管道讀取和寫入一些數據。在Rails中使用命名管道

我已經在一個簡單的Ruby應用程序中測試過它,它工作的很好。

但我不知道,我應該把它放在我的Rails應用程序中?我聽說過Rake任務,但我不確定,這是否正確。

我需要打開一個管道文件並監聽數據。如果有的話,我需要處理它並進行DB查詢。然後,將一些數據寫入另一個管道。我知道,它是如何工作的,但唯一的問題 - 如何使用Rails運行它?請給我一些例子。

回答

1

這聽起來像你有一個網站,將有一個後端數據源,你是通過管道流。這聽起來似乎不會成爲HTTP請求/響應週期的一部分,這可能會使耙子任務成爲一個不錯的選擇。

請在LIB /任務一個名爲listener.rake

它應該是這樣的:

desc 'Listens to pipe and does stuff' 
task :listen_to_pipe => :environment do 
    puts "Listen to Pipe starting" 
    #open pipe 
    #loop to listen to it 
    puts "going to do stuff" 
    #do stuff 
    #end 
end 

然後,在命令行中的項目的根目錄,你可以調用它像這樣的:

rake listen_to_pipe 

和不同的環境中,做到這一點:

rake listen_to_pipe RAILS_ENV=production 

此任務將可以訪問您的所有模型。要結束它,請按Ctrl + C

請記住,您需要停止&重新啓動進程以加載對模型所做的任何更改。

+0

謝謝你,它的工作=)。一些問題: 1.有沒有辦法使用rails應用程序自動加載這個任務? 2.當用戶點擊我網站上的鏈接時(例如),我需要將數據發送到管道。我可以使用全局變量,但我認爲它是個壞主意。 – FancyDancy

+0

我沒有任何方法可以在沒有批處理腳本的情況下同時啓動它們。另外,從webapp進入管道似乎很奇怪。如果管道任務在數據庫上運行,則可以跳過控制器中的該步驟並直接在數據庫上運行。或者你可以在數據庫中添加任務輪詢的內容。 – Tilendor

+0

例如,用戶點擊鏈接「寫入CD」,然後Rails使用命名管道將「寫入」發送到另一個應用程序。 我可以做一個全局變量然後發送它,但它是一個正確的方式? – FancyDancy