Rails背景过程

时间:2013-03-25 12:24:27

标签: ruby-on-rails

我无法找到解决此问题所需的gem /解决方案。所以基本上当一个请求进来时,我想分叉一个线程(或后台进程)并立即开始运行(没有延迟)。但是,我尝试使用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

2 个答案:

答案 0 :(得分:1)

延迟作业在触发后立即运行(根据您的代码),因为您没有指定何时运行它。要使其工作,您可以运行rake jobs:work,但您可能希望该进程在后台运行,因此请在终端中启动delayed_job守护程序。

script/delayed_job start

答案 1 :(得分: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。