Phusion Residential アプリケーションの環境変数の設定
-
09-06-2019 - |
質問
開発中(Mac OS X)にPassengerをセットアップしましたが、問題なく動作します。唯一の問題は後で起こりました。今私にはカスタムがあります GEM_HOME
にインストールされているパスと ImageMagick バイナリ "/usr/local"
. 。これらをソースとして取得されるシェル rc ファイルの 1 つに入れると、コンソールから生成されたプロセスの環境変数が解決されます。しかし、乗客はどうでしょうか?この方法で実行すると、同じアプリケーションが gem を見つけることができません。
解決
私は 2 つの解決策を知っています。最初の (文書化された) ここ) は基本的に manveru のものと同じです。コード内で ENV 変数を直接設定します。
2 つ目は、Passenger が使用する Ruby インタープリタのラッパーを作成することです。これは文書化されています。 ここ (passenger_with_ruby を探してください)。要点は、次の内容で構成される実行可能ファイル /usr/bin/ruby_with_env を作成する (そして、Apache 構成内でPassengerRuby を指定する) ことです。
#!/bin/bash
export ENV_VAR=value
/usr/bin/ruby $*
どちらも機能します。前者のアプローチはハッキング性が少し低いと思います。
他のヒント
require を行う前 (特に、rubygems を require する前) には、次のことができます。
ENV['GEM_HOME'] = '/foo'
これにより、このプロセス内の環境変数が変更されます。
コンピューター上で root 権限がある場合は、「envvars」ファイルに必要な環境変数を設定すると、Apache を起動する前に apachectl がこのファイルを実行することがわかりました。
envvars は通常、apachectl と同じディレクトリにあります。Mac OS X では、/usr/sbin にあります。見つからない場合は、apachectl スクリプトのソースを調べてください。
envvars ファイルを変更した後、「apachectl -k restart」で Apache を再起動します。
私もこの問題に遭遇しました。それ 表示されます その旅客は、を使用して設定された値をパススルーしません。 SetEnv
apache ディレクティブ - これは残念です。
おそらく、environment.rb または boot.rb に環境変数を設定できるかもしれません (Rails アプリについて話していると仮定します。Rack については詳しくありませんが、おそらく同様の機能があると思われます)