0

我有一个项目需要在循环和后台运行方法。

基本上我有一个方法:调用Web服务→读取数据→存储到数据库中→一遍又一遍地循环。

我发现了一个名为“loops”的宝石,但可能有两个问题:

  1. 我不知道他们是否支持 Rails 3 & Ruby 1.9.3 和

  2. 似乎没有任何支持(上次提交是半年前)。

4

5 回答 5

1

Ruby 有一个循环结构。

loop { puts "hi" }

于 2012-11-03T03:37:10.337 回答
0

您可以从 rake 任务调用该方法,然后从命令行使用nohup.

例子:

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.

于 2012-11-03T03:46:24.600 回答
0

开发一个简单的循环程序,例如:

loop do
  data = read_data_from_web_service
  store_data_to_db(data)
end

中配置脚本upstart。您可以foreman为此使用 gem。foreman否则,您可以upstart根据自己的方便直接使用。检查链接

或者你可以使用一些工具monit来监控脚本。

于 2012-11-03T07:13:49.080 回答
0

如果我理解正确,您的目标是让代码在后台无休止地循环。

以下是您需要的部分:

loop do <code> end

将在当前线程中不间断地循环<code>

mythread = Thread.new(<args>) do |<args>| <code> end
mythread.run

将在另一个线程(后台,也称为异步)中运行 <code> 并将 <args> 传递给它,就好像它是一个函数一样。

你想要做的是在一个线程内循环 <code> 。所以......(假设你想通过

myloop = lambda do loop do <code> end end
mythread = Thread.new(myloop) do |loop| loop.call end
mythread.run
于 2012-11-03T23:07:04.103 回答
0

您可以使用每当宝石。通过这个宝石很容易做这种工作。

甚至还有关于这个主题的免费railscast 。

创建一个 rake 任务,调用您的方法进行循环。(请参阅其他答案如何做到这一点)。

然后你可以创建一个时间表,上面写着,every 1.minute就像这样。

于 2012-11-04T05:08:49.890 回答