Ruby on rails Rails后台进程

Ruby on rails Rails后台进程,ruby-on-rails,Ruby On Rails,我很难找到解决此问题所需的gem/解决方案。因此,基本上,当一个请求传入时,我希望分叉一个线程(或后台进程)并立即开始运行(没有延迟)。然而,我尝试使用dalayed_作业,但它似乎想要一个队列,并且不会立即启动命令。在rails中有什么方法可以做到这一点吗 更新 #user_controller.rb def show @user = User.find(params[:id]) @user.update_user #process to be forked render jso

我很难找到解决此问题所需的gem/解决方案。因此,基本上,当一个请求传入时,我希望分叉一个线程(或后台进程)并立即开始运行(没有延迟)。然而,我尝试使用dalayed_作业,但它似乎想要一个队列,并且不会立即启动命令。在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
谢谢,

在Ruby 1.9中,您应该能够通过调用Process.spawn“your command”来实现这一点,例如:

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

此命令应生成一个单独的进程并返回进程id。

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

script/delayed_job start

如果您没有提到延迟作业中的时间,它将立即运行。@MuhamamdAwais它们被放入数据库中,但从未实际运行过。请检查延迟作业的最后一项属性,failed_at,last_error和run_at。您需要运行延迟作业工作进程来监视数据库。@MuhamamdAwais failed_at=NULL,last_error=NULL,并在={放入时}运行_。但是,我知道它不是run,如果可能的话,我希望在rails模型中实现它。否则,我将不得不对SQL进行大量的逻辑运算,并重新构建我的模型