我如何在Rails 4中这样做

时间:2013-11-19 08:25:04

标签: ruby-on-rails ruby multithreading task

我之前使用sinatra编写的应用程序遵循类似于下面代码中的行为

require 'sinatra'

class A
  attr_accessor :tick

  def initialize
    @tick = 0
  end
  def start
    while true
      @tick +=1
      sleep 10
    end
  end
end

t = A.new
Thread.new do t.start end

get '/' do
   t.tick
end

它在启动时启动了几个线程,每个线程都有一个进程到它自己的类,它运行正常,能够在浏览器上获取和设置值,并将大多数数据存储在mysql后端,主要就像MVC设置一样Rails我无法重现相同的行为,虽然我在Rails的一个完整的菜鸟我没有找到一个明确的解决方案

1 个答案:

答案 0 :(得分:1)

您需要rails中的后台任务管理器才能实现此类功能。有一个few alternatives for this

我过去曾使用delayed_job,它非常简单,使用您当前的数据库来存储作业和结果(没有额外的依赖关系)。

但在你的情况下,我建议使用resque:它使用redis(所以这是一个依赖项,如果你可以忍受),但它有一个内置的管理控制台来检查正在运行的作业并管理他们。看起来像一个完美的契合:)