我有一個需要在循環和後臺運行方法的項目。在循環中運行方法
基本上我有一個方法:調用Web服務 - >讀取數據 - >存儲到數據庫 - >循環一遍又一遍。
我發現了一個叫做「loops」的gem(https://github.com/kovyrin/loops),但也許有2個問題:a)我不知道他們是否支持Rails 3 & Ruby 1.9.3和2)似乎沒有支持(最後一次提交是半年前)。
對此提出建議?他們都非常受歡迎。
非常感謝,夥計們!
我有一個需要在循環和後臺運行方法的項目。在循環中運行方法
基本上我有一個方法:調用Web服務 - >讀取數據 - >存儲到數據庫 - >循環一遍又一遍。
我發現了一個叫做「loops」的gem(https://github.com/kovyrin/loops),但也許有2個問題:a)我不知道他們是否支持Rails 3 & Ruby 1.9.3和2)似乎沒有支持(最後一次提交是半年前)。
對此提出建議?他們都非常受歡迎。
非常感謝,夥計們!
開發是一個簡單的循環程序:
loop do
data = read_data_from_web_service
store_data_to_db(data)
end
配置upstart
腳本。您可以使用foreman
寶石。 否則,根據您的方便,您可以只使用foreman
而不使用upstart
。 檢查link
或者您可以使用一些工具如monit
來監視腳本。
Ruby有一個循環結構。
loop { puts "hi" }
他想在後臺運行它,因此我提到了線程 – 2012-11-03 03:48:28
你可以稱之爲從rake任務的方法,然後在命令行中與nohup
啓動rake任務。
例子:
在lib/tasks/fetch_data.rake
task :fetch_and_save => :environment do
loop do
Model.method() # Do whatever you need to do here
end
end
然後,您可以用$ nohup rake fetch_and_save
啓動它。
看起來不錯。我會盡快嘗試併發布結果。順便說一句,謝謝! –
你也可以使用像[god](https://github.com/mojombo/god)這樣的進程監視器來保持它運行。 –
如果我理解正確,你的目標是讓代碼在後臺無限循環。
這裏有您需要的部分:
loop do <code> end
將循環<碼>馬不停蹄在當前線程
mythread = Thread.new(<args>) do |<args>| <code> end
mythread.run
將運行<碼>在另一個線程(背景,又名異步)並且會通過<參數,就像它是一個函數一樣。
你想做什麼,就是循環<代碼>在一個線程內。所以...(假設你想傳遞
myloop = lambda do loop do <code> end end
mythread = Thread.new(myloop) do |loop| loop.call end
mythread.run
你有什麼試過?這看起來很簡單,創建一個線程,它將在循環中運行該方法並啓動線程。 – 2012-11-03 03:37:06
我沒有嘗試過任何東西。按照你發佈的方式,我應該在app init中啓動線程,對吧? –