我有一个需要在循环和后台运行方法的项目。在循环中运行方法
基本上我有一个方法:调用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中启动线程,对吧? –