26

ここで質問/回答を読みましたが、 /etc/environmentに変数を設定する方法がわかりません。ファイルを編集した場合、マシンを再起動するか、単に現在のユーザーをログアウトする (または新しいユーザーにログインする) 必要がありますか?

マシン上の Web サイトが「開発」モードまたは「テスト」モードであることを示すグローバル変数を設定したいと考えています。プロジェクトごとにこれを設定する必要はありません (PHP、Java/Tomcat、NodeJS などを使用するかどうか)。(Apacheの場合)次の方法で環境変数を設定できることを認識しています:

  1. phpから直接putenv()(ファイルがどのサーバー上にあるかを把握しようとするロジックを避けたいので、これは役に立たないようです)
  2. .htaccess を使用するSetEnv ENVIRONMENT 'local'(これには、サーバーごとにこのファイル/コードを複製する必要があり、理想的ではありません)
  3. Virtual Host ディレクティブを使用するSetEnv ENVIRONMENT 'local'(仮想ホストを使用している場合、ほぼすべてのケースで使用していますが、コードを何度もコピー/貼り付けする必要があります)
  4. httpd-conf 内SetEnv ENVIRONMENT 'local'(これは apache にのみ適用されます。NodeJS サーバーにも適用したいと考えています)

#4 ができないと言っているわけではありません (そして #3 を NodeJS サーバーに選択的に適用します)。しかし、これは /etc/environment を使用する正当な理由だと思います。上で述べたように、(最初にファイルを作成した後に) ファイルを編集し、次の組み合わせを試しましたが、どれもうまくいかないようでした:

ENVIRONMENT='local'
ENVIRONMENT=local
export ENVIRONMENT='local'
export ENVIRONMENT=local

次の出力に変数が見つからなかったため、それらのどれも機能しなかったと言います。

print_r($_SERVER);
print_r($_ENV);
echo(getenv('ENVIRONMENT'));
4

3 に答える 3

51

やりたいことは、Apache 構成ファイルを使用することです。構成フォルダーと httpd.conf ファイル (または変更されたバージョン) にアクセスする必要があります。次に、このアプローチを使用して構成ファイルを動的にロードするように httpd.conf を構成できます。

Include conf.d/*.conf

conf.d フォルダー内に、特定の環境構成ファイルを配置します。

server-environment-dev.conf の例:

SetEnv ENVIRONMENT "local"

server-environment-prod.conf の例:

SetEnv ENVIRONMENT "production"

これらの設定は、使用可能な環境変数として php コードに表示されます。このアプローチにより、vhost ファイル、.htaccess、およびその他の構成ファイルを環境にとらわれないように保つことができます。

etc/environment、etc/profile.d、.bash_profile、.profile などのファイルは、プロセス/ユーザーの制限により、Apache の PHP で読み取ることができません。必要に応じて変数を bash、smash、crash して、端末に設定されていることを確認できますが、Apache 構成ファイルのいずれかを介して設定しない限り、phpinfo() には表示されません。

NodeJS の場合、環境変数を渡してアプリを開始するか、ユーザーに依存したくない場合は、.bash_profile と、場合によっては etc/environment ファイルを含めて、複数の方法で NODE_ENV を設定できます。

ノードの良い読み物: http://www.hacksparrow.com/running-express-js-in-production-mode.html

于 2013-11-28T16:05:33.593 に答える
2

したがって、どこかにグローバル構成ファイルがあると思います。そのファイルに変更可能な定数を入れてみませんか? サーバーレベルで何かを設定しようとするよりもはるかに簡単です。

define('ENVIRONMENT', 'testing');
if(ENVIRONMENT == 'testing') {
   echo 'We\'re just testing';
}
于 2013-10-31T00:28:48.847 に答える