首页 > 解决方案 > application.rb 中 Kernel.spawn 和 rails 的奇怪行为

问题描述

如果我添加以下行application.rb

puts 'in application.rb'
pid = spawn('rake jobs:work')
Process.detach pid

我看到以下输出

in application.rb
=> Booting Puma
...
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
in application.rb
[Worker(host:local pid:9966)] Starting job worker
in application.rb
[Worker(host:local pid:9998)] Starting job worker
in application.rb
[Worker(host:local pid:10032)] Starting job worker

如果我删除spawn呼叫in application.rb,则按预期仅在开始时显示一次。

此输出大约每秒写入一次。所有这些进程都是健康的,并且会在我杀死 puma 时停止。

我无法弄清楚发生了什么。为什么这段代码每秒都会执行一次?

标签: ruby-on-railsrubyspawn

解决方案


... rake 也需要文件,这就是原因。

要使其按预期工作:

if $0 =~ /rails/
  pid = spawn('rake jobs:work')
  Process.detach pid
end

推荐阅读