基于外部redis队列,我希望Sinatra应用程序运行如下脚本:
ruby fetch_vin.rb vin_number_123
这将启动watir-webdriver
并适当地向队列报告。脚本完成后,除了Sinatra应用程序之外的所有内容都应关闭。
然而,似乎Thread
以及exec
和spawn
在从ruby内部运行时都是阻塞的。
我如何开火&忘记?
答案 0 :(得分:2)
您可以使用Process#spawn
:
pid = Process.spawn("ruby fetch_vin.rb vin_number_123")
Process.detach(pid)
我认为你遗漏的一点就是在产生这个过程后调用detach
。这将分离并让两个进程继续运行。将适用于任何命令,而不仅仅是ruby脚本。
有关详细信息,请参阅Process
Ruby Docs。