在 rails 服务器完全启动工头后,如何启动 Procfile 进程?

How can I start a Procfile process, after the rails server has completely started up with foreman?

我有一个 rails 应用程序,它 运行 与 ruby 脚本并行。这是一个 ruby-mqtt 订阅者脚本,基本上它通过 mqtt 协议侦听消息,然后与 rails 应用程序交互。

问题是工头与 rails 服务器同时启动了这个进程,当有消息被广播并且服务器还没有完成它的启动过程时,脚本崩溃,工头用它杀死了服务器.

这是 Procfile 的示例:

server: rails s -p 3000 -b 0.0.0.0
mqtt_subscriber: ruby ./mqtt/subscribers/mqtt_subscriber.rb

当前的解决方法是 运行 rails 服务器,当它完成启动时,从另一个终端或使用屏幕启动订阅者。

有没有办法运行服务器通过foreman start完全启动后订阅者进程?

您可以使用 wait-for-it bash script 等待 tcp 端口可用,然后再启动 mqtt 订阅者

server: rails s -p 3000 -b 0.0.0.0
mqtt_subscriber: wait-for-it.sh -t 0 localhost:3000 -- ruby ./mqtt/subscribers/mqtt_subscriber.rb