2012-05-11 11 views
6

私たちはレール3.0xのアプリケーションのためにNginx + Phusion Passengerでubuntuサーバを稼働させています。phusionの乗客は環境変数を見ませんか?

私はテストマシン上の/ etc /環境で設定した環境変数があります。

MC_TEST=true 

私は、コンソール(バンドルのexecレールc)を実行し、出力ENV [「MC_TEST」]なら、私は本当」を参照' しかし、同じコードをページに貼り付けると(<%= ENV ["MC_TEST"]%>)、何も表示されません。その変数は存在しません。質問に私をリード

1 - nginxの(するSetEnvをのapacheではない)と乗客に環境変数を取得するための適切な方法は何ですか?

2 - なぜ乗客は適切な環境にいませんか?

答えて

7

Passenger fusion v4 +を使用すると、bashrcファイルから直接環境変数を読み取ることができます。ここで乗客の処理を実行しているユーザーのホームフォルダ内のbashrcの生活(私の場合、それはEC2のLinuxとnginxのために、Ubuntuのだった)

はbashrcに

+0

このドキュメントのセクションでは、環境変数について必要なものをすべて説明しています。彼らが何で、どのように働いて、彼らの財産、そしてどのようにPhusion Passenger-servedされたアプリにそれらを渡すか。 – Hongli

+0

ちょうどメモですが、これは非対話シェルでもデフォルトで動作します。 – digicazter

4

ubuntuでnginxとnginxのinitスクリプトを使用した場合、同じ問題が発生しました。 私はsudoサービスnginx restart(initスクリプトによってインストールされています)を使ってnginxを起動し、
rootで実行していて、rootがログインユーザ環境変数を取得しなかったためです。 これには2つの解決策があります。 1人が手動でnginxを実行しています。

sudo service nginx stop 
sudo -E /path/to/your/nginx 

1は、後者の溶液は何とか醜いです、あなたのnginxのinitスクリプト

export MC_TEST=true 

にENVを追加している、しかし、それは動作します。そして、より良い方法は、ログインユーザenvを保存するようにinitスクリプトに指示する設定が見つかったと思います。

+0

nginxを手動で実行すると、私の手口が変わりました。ありがとう! – Myxtic

0
の詳細に入る documentationであることを確認します

私は別の醜い解決策を得ました。

env_file = '/etc/environment' 
if File.exist?(env_file) 
    text = File.open(env_file).read 
    text.each_line do |line| 
    key, val = line.split('=', 2) 
    ENV[key] = val.strip 
    end 
end 
関連する問題