質問

開発中(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 については詳しくありませんが、おそらく同様の機能があると思われます)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top