Heroku:在临时站点上运行不同的Web服务器进程?

Ben*_*rts 4 heroku

我想在我的一个临时站点上运行不同的Web服务器,它提供了更多调试友好的错误处理.我想知道是否/如何实现这一点,而无需在我的暂存和生产部署之间更改Procfile.

我试过这个:

web: newrelic-admin run-program python manage.py run_gunicorn -b 0.0.0.0:$PORT -w 4 -k gevent 
debug: newrelic-admin run-program python manage.py runserver_plus 0.0.0.0:$PORT --threaded
Run Code Online (Sandbox Code Playgroud)

然后将web缩放到0并调试为1,但现在我从本文中清楚地看到web是一个特殊的保留关键字,这是唯一获取http请求的进程.那么有没有办法管理这个,而无需维护一个单独的分支或类似的?

Jon*_*joy 6

你当然可以.

如您所知,您需要使用"Web"流程类型.

请记住,进程类型实际上只是命名命令:"每个进程类型是在启动该进程类型的dyno时执行的命令的声明"

您可以控制命令.

在一个小测试应用程序中,我刚创建了一个bin目录,添加了一个文件,并赋予它执行权限 - 如下所示:

mkdir bin
vi bin/go.sh
chmod a+x bin/go.sh
Run Code Online (Sandbox Code Playgroud)

内容看起来像这样:

echo $*
echo $FOOBAR
thin --rackup config.ru start $*
Run Code Online (Sandbox Code Playgroud)

然后我修改我的Procfile看起来像这样:

web: ~/bin/go.sh --port $PORT
Run Code Online (Sandbox Code Playgroud)

我还在我的应用程序中添加了一个config var:

heroku config:添加FOOBAR = 123

然后我在开始后查看了日志

2013-03-14T11:49:42+00:00 heroku[web.1]: Starting process with command `~/bin/go.sh --port 47302` 2013-03-14T11:49:43+00:00 app[web.1]: --port 47302 2013-03-14T11:49:43+00:00 app[web.1]: 123 2013-03-14T11:49:44+00:00 heroku[web.1]: State changed from starting to up

优秀.你能看到发生了什么吗?

  • 当我启动web dyno时,Heroku查找了Web进程类型并执行了命令
  • 该命令启动了我的服务器,但在此之前,它打印了发送给它的参数(--port XXX)和FOOBAR环境变量(将由config var设置)

所以我认为这就是你所需要的.只需编写一个bash脚本,根据config var,在staging vs production上执行不同的命令.在暂存时,设置config var.在生产上,不要.