4

ステージングサイトの1つで別の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にスケーリングしますが、この記事から、Webは特別に予約されたキーワードであり、httpリクエストを取得する唯一のプロセスであることがわかりました。それで、別のブランチなどを維持することなくこれを管理する方法はありますか?

4

2 に答える 2

6

できますよ。

お気づきのとおり、「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スクリプトを記述してください。ステージング時に、構成変数を設定します。本番環境では、しないでください。

于 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 に答える