2

dotcloud は環境変数として多くの有用な情報を提供しますが、環境変数にnginx.confアクセスできません。これを回避する良い方法は何ですか?

wwwシナリオは次のとおりです。特定の URL を静的サービスからサービスにリダイレクトしたいrestので、現在、ターゲット URL を にハードコーディングしていますnginx.confDOTCLOUD_REST_HTTP_HOSTサービスを簡単に移行できるようにするため、変数を使用したいと思います。

4

2 に答える 2

4

これは、postinstallサービスのスクリプトを使用する場合に適しています。dotCloud は、プッシュおよびデプロイ サイクルの各段階で実行するためのビルド フックpostinstallを提供します。フックは最後に実行され、すべての環境変数にアクセスできます。実際の環境から、または実際の環境から変数を読み取ることができ~/environment.jsonます (歴史的な理由により、環境に入れられるものはサービスの種類によって異なる可能性があるため、ファイルはわずかに信頼性が高くなります)。

例を次に示しdotcloud.ymlます。

www:
   approot: www
   type: static
   environment:
     LIMITRATEVAR: 2k

nginx.conf(www/nginx.conf にあります):

# limitratevar should get set in dotcloud.yml's environment section
# or via `dotcloud env set limitratevar` if you want to set it for all services.
# And then use a postinstall script to update this nginx.conf with sed
limit_rate LIMITRATEVAR;

最後にpostinstall、環境から $LIMITRATEVAR の値を読み取り、nginx.conf をsed次のように更新する例 (www/postinstall にあります)。

#!/usr/bin/env bash

# files named "postinstall" will get run automatically when the code is deployed
# to the container where your service runs.
# See:
# http://docs.dotcloud.com/guides/build-file/#prebuild-postbuild-postinstall-build-hooks
# http://docs.dotcloud.com/guides/hooks/#post-install

# Make sure we error-out if there are any problems
set -e
echo "Updating the limit_rate to $LIMITRATEVAR"
sed -i.original "s/LIMITRATEVAR/$LIMITRATEVAR/g" ~/current/nginx.conf
echo "nginx.conf updated. Original stored in nginx.conf.original"
于 2013-10-14T18:34:44.357 に答える
2

ここでの解決策は一部で機能しますが、DotCloud での実装に問題があるとは限りませんが、まだ試していない場合は試してみる価値があります。

構成の最上位レベル:

 env MYVAR;

http レベル:

 perl_set $myvar 'sub { return $ENV{"MYVAR"}; }';

次に、たとえばサーバー レベルで次のようにします。

 root $myvar; 
于 2013-10-13T21:27:39.727 に答える