从ruby异步运行ruby脚本

时间:2016-01-01 04:32:04

标签: ruby asynchronous sinatra watir-webdriver child-process

基于外部redis队列,我希望Sinatra应用程序运行如下脚本:

ruby fetch_vin.rb vin_number_123

这将启动watir-webdriver并适当地向队列报告。脚本完成后,除了Sinatra应用程序之外的所有内容都应关闭。

然而,似乎Thread以及execspawn在从ruby内部运行时都是阻塞的。

我如何开火&忘记?

1 个答案:

答案 0 :(得分:2)

您可以使用Process#spawn

pid = Process.spawn("ruby fetch_vin.rb vin_number_123")
Process.detach(pid)

我认为你遗漏的一点就是在产生这个过程后调用detach。这将分离并让两个进程继续运行。将适用于任何命令,而不仅仅是ruby脚本。

有关详细信息,请参阅Process Ruby Docs