Heroku 上的条件服务器启动

Conditional server start on Heroku

为了避免使用 Foreman 进行开发时出现问题,我需要将 Puma 服务器包装在 Socks 代理中,以便 Quotaguard 仅在生产和生产中获得静态 IP。

对此 article that I found from this question 使用 link 我在 Procfile 的 bin/web 调用中实现了以下代码。

#!/bin/sh
if [ "$RACK_ENV" == "production" ]; then
  echo Using qgsocksify to wrap Puma
  bin/qgsocksify bundle exec puma -C config/puma.rb
else
  echo Using straight Puma
  bundle exec puma -C config/puma.rb
fi

虽然环境是在 RACK_ENV 上设置的生产环境,但未包装的 "straight Puma" 服务器启动。在本地测试这个是可行的,但在 Heroku 上却失败了。

会导致它在 Heroku 上失败的语法错误是什么?

显然 sh 在 Heroku 上不使用 == 来实现等价,但在我的 Mac 上本地工作,这就是它在开发中工作的原因。谷歌搜索显示标准 sh 使用 = 表示等价。然而,在这种情况下,我只是将 #!/bin/sh 更改为 #!/bin/bash,因为 Heroku 也支持 bash。

#!/bin/bash
if [ "$RACK_ENV" == "production" ]; then
  echo Using qgsocksify to wrap Puma
  bin/qgsocksify bundle exec puma -C config/puma.rb
else
  echo Using straight Puma
  bundle exec puma -C config/puma.rb
fi