2

我无法找到解决此问题所需的 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

谢谢,

4

2 回答 2

1

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

script/delayed_job start
于 2013-03-25T14:18:16.697 回答
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。

于 2013-03-25T12:33:07.993 回答