为什么foreman gem忽略了PORT环境变量?

时间:2012-03-21 11:58:29

标签: ruby-on-rails ruby heroku gem foreman

我希望foreman gem使用我的开发环境文件中提供的PORT值,而不是使用自己的值。我的文件设置如下所示:

  1. 启动领班的bash脚本:

    领班开始-e development.env

  2. development.env文件内容:

    PORT = 3000

  3. Procfile内容

    web:bundle exec rails server thin -p $ PORT -e $ RAILS_ENV $ 1

  4. 开发服务器最终从端口5000开始。我知道我可以使用--p 3000启动工头强制它使用该端口。但这违背了env文件的目的。

    有什么建议吗?

2 个答案:

答案 0 :(得分:10)

我知道这是一个很老的帖子,但我花了一段时间才弄明白这样做也可以在这里添加一个注释。

Foreman根据您在Procfile中定义服务的位置来增加PORT。

假设我们的PORT环境变量设置为3000。

在我们的第一个Procfile示例中,Puma将在PORT 3000上运行:

web: bundle exec puma -q -p $PORT
worker: bundle exec rake jobs:work

但是在我们的第二个Procfile中它将在PORT 3100上运行,因为PORT变量用在第二行。

worker: bundle exec rake jobs:work
web: bundle exec puma -q -p $PORT

不确定原因,我想是为了防止不同的进程尝试使用相同的PORT。

答案 1 :(得分:8)

查看代码:https://github.com/ddollar/foreman/blob/master/lib/foreman/process.rb它看起来工头只会将PORT作为命令行参数。