できますよ。
お気づきのとおり、「Web」プロセスタイプを使用する必要があります。
プロセスタイプは事実上、単にコマンドという名前であることに注意してください。「各プロセスタイプは、そのプロセスタイプの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:add 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スクリプトを記述してください。ステージング時に、構成変数を設定します。本番環境では、しないでください。