循环运行方法

时间:2012-11-03 03:34:14

标签: ruby-on-rails ruby loops background

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

基本上我有一种方法:调用Web服务 - >阅读数据 - >存储到数据库中 - >循环遍历。

我发现了一个叫做“循环”的宝石(https://github.com/kovyrin/loops),但也许有2个问题:a)我不知道它们是否支持Rails 3& Ruby 1.9.3和2)似乎没有支持(最后一次提交是半年前)。

连连呢?他们都非常欢迎。

非常感谢,伙计们!

5 个答案:

答案 0 :(得分:1)

Ruby有一个循环结构。

loop { puts "hi" }

答案 1 :(得分:0)

您可以从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启动它。

答案 2 :(得分:0)

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

loop do
  data = read_data_from_web_service
  store_data_to_db(data)
end

upstart中配置脚本。您可以使用foreman gem。 否则,根据您的方便,您可以只使用foreman而不使用upstart。 查看link

或者您可以使用monit之类的工具来监控脚本。

答案 3 :(得分:0)

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

以下是您需要的部分:

loop do <code> end

将循环&lt;代码&GT;当前线程中的不间断

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

将运行&lt;代码&GT;在另一个线程(背景,又名异步)并将传递&lt; ARGS&GT;对它来说,好像它是一个功能。

你想要做的是循环&lt;代码&GT;在一个线程内。所以......(假设你要通过

myloop = lambda do loop do <code> end end
mythread = Thread.new(myloop) do |loop| loop.call end
mythread.run

答案 4 :(得分:0)

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

这个话题甚至还有免费的railscast

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

然后您可以创建一个表示every 1.minute的日程表。