2013-03-25 47 views
2

我无法找到宝石/解决方案,我需要解决这个问题。所以基本上当请求进入时,我想分叉一个线程(或后台进程)并立即开始运行(不会延迟)。但是,我尝试使用dalayed_jobs,但它似乎想要一个队列,并且不会立即启动该命令。有没有办法做到这一点在铁轨?Rails的后台进程

更新

#user_controller.rb 
def show 
    @user = User.find(params[:id]) 
    @user.update_user #process to be forked 
    render json:@user 
end 

#user.rb 

def update_user 
    # code to update user 
end 
handle_asynchronously :update_user 

感谢,
DO

+0

如果你不提在延迟作业的时间就会立即运行。 – 2013-03-25 12:26:05

+0

@MuhamamdAwais他们被放入数据库,但从未真正跑过。 – dostrander 2013-03-25 12:29:51

+0

请你检查的delayed_job以下属性,failed_at,last_error的最后一个条目,run_at – 2013-03-25 12:32:25

回答

1

延迟作业运行它(根据您的代码),因为你没有指定什么时候运行它触发后立即处理。要运行它,您可以运行rake jobs:work,但您可能希望进程在后台运行,以便在终端中启动delayed_job守护进程。

script/delayed_job start 
0

从Ruby 1.9的你应该能够通过调用Process.spawn “你的命令” 要做到这一点,例如:

pid = Process.spawn("./some_shell_script.sh") 
puts "A shell script has just been launched with a Process ID of #{pid}" 

该命令应该产生一个独立的进程并返回进程ID。

+0

如果可能的话,我想在导轨模型中使用它。否则,我将不得不用SQL做很多逻辑并重建我的模型 – dostrander 2013-03-25 13:52:04