异步 运行 来自 ruby 的 ruby 脚本

Asynchronously running a ruby script from ruby

基于外部redis队列,我想要一个Sinatra应用运行这样的脚本:

ruby fetch_vin.rb vin_number_123

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

但是 Thread 以及 execspawn 似乎都在 运行 从 ruby 内部阻塞时。

我如何触发并忘记?

您可以使用 Process#spawn:

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

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

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