8

Rails 3.0xアプリ用にNginx + Phusion Passengerを使用してubuntuサーバーを実行しています。

テスト マシンの /etc/environment に環境変数を設定しました。

MC_TEST=true

コンソール (bundle exec rails c) を実行して ENV["MC_TEST"] を出力すると、「true」と表示されます。しかし、同じコードをページ ( <%= ENV["MC_TEST"] %> ) に配置すると、何も表示されません。その変数は存在しません。

それは私に疑問を投げかけます:

1 - nginx (apache SetEnv ではない) を使用して環境変数をパッセンジャーに入れる適切な方法は何ですか?

2 - Passenger に適切な環境がないのはなぜですか?

4

4 に答える 4

4

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

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

1つは、nginx initスクリプトにenvを追加することです

export MC_TEST=true

後者の解決策はやや醜いですが、うまくいきます。そして、initスクリプトにログインユーザーenvを保持するように指示する構成を見つけるのがより良い方法だと思います。

于 2012-08-23T06:31:44.223 に答える
0

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

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
于 2014-01-12T10:11:06.770 に答える