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