异步 运行 来自 ruby 的 ruby 脚本
Asynchronously running a ruby script from ruby
基于外部redis队列,我想要一个Sinatra应用运行这样的脚本:
ruby fetch_vin.rb vin_number_123
这将启动 watir-webdriver
并适当地向队列报告。脚本完成后,除了 Sinatra 应用程序之外的所有内容都应该关闭。
但是 Thread
以及 exec
和 spawn
似乎都在 运行 从 ruby 内部阻塞时。
我如何触发并忘记?
您可以使用 Process#spawn
:
pid = Process.spawn("ruby fetch_vin.rb vin_number_123")
Process.detach(pid)
我认为您遗漏的一点是在生成进程后调用 detach
。这将分离并让两个进程继续 运行。适用于任何命令,而不仅仅是 ruby 脚本。
有关详细信息,请参阅 Process
Ruby Docs。
基于外部redis队列,我想要一个Sinatra应用运行这样的脚本:
ruby fetch_vin.rb vin_number_123
这将启动 watir-webdriver
并适当地向队列报告。脚本完成后,除了 Sinatra 应用程序之外的所有内容都应该关闭。
但是 Thread
以及 exec
和 spawn
似乎都在 运行 从 ruby 内部阻塞时。
我如何触发并忘记?
您可以使用 Process#spawn
:
pid = Process.spawn("ruby fetch_vin.rb vin_number_123")
Process.detach(pid)
我认为您遗漏的一点是在生成进程后调用 detach
。这将分离并让两个进程继续 运行。适用于任何命令,而不仅仅是 ruby 脚本。
有关详细信息,请参阅 Process
Ruby Docs。