2011-05-30 61 views
1


我需要建立on Rails應用程序的紅寶石,它將調用每隔1秒到遠程API URL,爲了趕上那應該是可以發生的事件遠程Web服務器 的網址是運行在軌道上功能紅寶石,而無需打開瀏覽器

「remoteservername.com/folder/folder/waitforevents」

一旦發生通緝事件中,我需要執行一些行動,並再次撥打了「remoteservername。 C om/folder/folder/waitforevents「網址。
這應該是一個連續的任務,並沒有打開瀏覽器。這意味着這個應用程序應該在我的Web服務器啓動後立即開始運行。

所以我的問題是我怎麼能運行Rails應用程序的紅寶石,而無需打開瀏覽器 只是服務器

到現在爲止,我在寫作的Rails應用程序在瀏覽器中打開時開始的經驗和一些網址爲調用。 所以我會很高興,如果你能引導我在這個問題上

THANKS

+2

我認爲你正在尋找一個cron工作。看到每當寶石。 Railscasts提供的教程。 – apneadiving 2011-05-30 10:53:55

回答

1

您可以用./script/rails runner一起使用cron,它可以從您的Rails應用程序執行任何方法。

由於您需要每秒執行一些操作,因此您可以啓動一次runner並創建一個循環。您可以從cron啓動它,將PID保存到某個地方,然後讓cron殺死給定的進程,或者您可能只是在Ruby代碼中暫停循環。一個簡單的例子:

class MyModelOrAnything 
    def self.start_loop 
    stop_fname = "./stop_the_loop" 
    while !File.exist? stop_fname 
     do_this_action 
     sleep 1 
    end 
    ensure 
    File.unlink stop_fname if File.exist? stop_fname 
    end 
end 

一個cron任務可以再建立在已知目錄中的文件「stop_the_loop」,以及第二後你的任務將停止。

事實上,在這種情況下,cron可能不是必需的。由於您應該只有該腳本的一個實例,因此最好手動啓動它並手動停止它。如果你想使用cron,你可以添加一個類似信號量的文件,它會告訴腳本一個進程已經在運行(該文件應該被'確保'塊刪除)。

cron的配置的一個例子:

0 8 * * 1 cd /my/app && bundle exec ./script/rails runner ThisObject.start_loop 
0 22 * * 5 touch /my/app/stop_the_loop 

..和這個「信號」的例子:

class MyModelOrAnything 
    def self.start_loop 
    running_fname = "./i_am_working" 
    return :already_running if File.exist? running_fname 
    stop_fname = "./stop_the_loop" 
    begin 
     File.open(running_fname,'w') {|f| f.write Time.now.to_s(:db) } 
     while !File.exist? stop_fname 
     do_this_action 
     sleep 1 
     end 
    ensure 
     File.unlink running_fname if File.exist? running_fname 
     File.unlink stop_fname if File.exist? stop_fname 
    end 
    end 
end 
+0

爲了聆聽api遠程服務器事件,我需要調用 – 2011-05-30 12:46:19

+0

以便聆聽我需要調用 「remoteservername.com/folder/folder/waitforevents」url的每個1的api遠程服務器事件第二** 從我播種的最小克倫作業間隔是1分鐘。 所以有可能通過某種循環從我的應用程序執行url繼續調用,並要求cron作業只是爲了執行該功能而不設置時間間隔? – 2011-05-30 12:54:02

+0

我的意思是我可以告訴玉米作業在預定義的時間內開始一些任務,並在預定義的時間內結束它。例如現在開始工作,並從現在起三天結束? – 2011-05-30 12:59:32

2

你確定你需要的那種應用程序的軌道?我建議你嘗試用原始的ruby代碼來完成這項工作,這樣更容易維護。正如其他人所說的,您可以使用cron定期啓動您的應用程序。