我想在我的一个临时站点上运行不同的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
然后将web缩放为0并调试为1,但现在我this article清楚地知道 web 是一个特殊的保留关键字,这是获取http请求的唯一进程。那么有没有办法管理这个,而无需维护一个单独的分支等?
答案 0 :(得分:5)
当然可以。
如您所知,您需要使用“网络”流程类型。
请记住,流程类型实际上只是命名命令:“每个流程类型都是在启动该流程类型的dyno时执行的命令的声明”
您可以控制命令。
在一个小测试应用程序中,我刚创建了一个bin目录,添加了一个文件,并赋予它执行权限 - 如下所示:
mkdir bin
vi bin/go.sh
chmod a+x bin/go.sh
内容如下:
echo $*
echo $FOOBAR
thin --rackup config.ru start $*
然后我修改了我的Procfile,如下所示:
web: ~/bin/go.sh --port $PORT
我还在我的应用中添加了配置变量:
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
优异。你能看出发生了什么吗?
所以我认为这就是你所需要的。只需编写一个bash脚本,根据config var,在staging vs production上执行不同的命令。在暂存时,设置config var。在生产上,不要。
答案 1 :(得分:1)
您可以创建一个单独的Heroku应用程序作为您的暂存环境并使用相同的代码库(本地git repo)。见Managing Multiple Environments for an App
请注意,您询问的具体任务涉及更改Procfile
,因此您可能需要使用分支。在这种情况下,你像这样推动分支(假设按照上面的指南多个env):
$ git push heroku-staging <branch_name>:master --app staging_app_name