你好,
我创建了一个 fork 来测试一个概念。 我们主要在开发中使用 Foreman 来运行 Redis、一个 Resque 工作者和一个 Resque 调度程序。 这些工作程序和调度程序依赖于 Redis 来启动,并且在某些情况下会因此而失败。
https://github.com/rvanlieshout/foreman 上的版本支持 Procfile 中的依赖定义。 现在它只使用 5 秒的延迟来允许父级开始。 一个 procfile 可能看起来像:
mongodb: mongod --quiet --dbpath=db/mongo/
| redis: redis-server /opt/local/etc/redis.conf
| | worker: bundle exec rake environment resque:work QUEUE=* VERBOSE=1 RAILS_ENV=development
| | scheduler: bundle exec rake resque:scheduler QUEUE=* VERBOSE=1 RAILS_ENV=development
post_office: post_office --smtp 10025 --pop3 10110
(注:这里Redis不依赖Mongo……只是为了演示)
当执行“工头启动”时,它首先启动 Mongo 和 PostOffice,5 秒后启动 Redis,10 秒后启动工作程序和调度程序。
此版本的 Foreman 向后兼容,但引发了一些其他问题:
所以...你之前有没有与依赖相关的问题? 您认为此解决方案可能会包含在 Foreman 的未来版本中吗?
还有……感谢这个项目! 它确实帮助我们改进了开发工作流程。
除了检测它是否已绑定到其分配的端口之外,实际上没有任何方法可以判断某物何时“准备好”。 并非所有进程都绑定到端口,我宁愿不将这种相当复杂的关系引入工头。
如果您感觉如此倾向,您可以用脚本包裹您的流程,该脚本在开始预期流程之前观察其他可用的东西。
干杯,
大卫
我会喜欢这个 :( - 我有一堆 RTSPProxy 和 RTSPClient 进程,我想延迟启动客户端。
已经实施了吗?