你当然可以。
正如您所注意到的,您需要使用“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 脚本,根据配置变量,在暂存和生产上执行不同的命令。在暂存时,设置配置变量。在生产中,不要。