4

我想在我的一个登台站点上运行不同的网络服务器,它提供了对调试更友好的错误处理。我想知道是否/如何在无需更改我的登台和生产部署之间的 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,但是从这篇文章中我现在清楚地知道web是一个特殊的保留关键字,它是获取 http 请求的唯一进程。那么有什么方法可以管理这个而不必维护一个单独的分支或类似的东西?

4

2 回答 2

6

你当然可以。

正如您所注意到的,您需要使用“web”进程类型。

请记住,进程类型实际上只是命名命令:“每个进程类型都是在启动该进程类型的测功机时执行的命令的声明”

你控制命令。

在一个小测试应用程序中,我刚刚创建了一个 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 配置:添加 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 脚本,根据配置变量,在暂存和生产上执行不同的命令。在暂存时,设置配置变量。在生产中,不要。

于 2013-03-14T11:57:14.587 回答
1

您可以创建一个单独的 Heroku 应用程序作为您的暂存环境并使用相同的代码库(本地 git 存储库)。请参阅管理应用程序的多个环境

请注意,您询问的具体任务涉及更改Procfile,因此您可能需要使用分支。在这种情况下,您可以像这样推送分支(假设按照上面的指南有多个 env):

$ git push heroku-staging <branch_name>:master --app staging_app_name
于 2013-03-12T22:01:01.673 回答