0

私の Rails アプリは ImageMagick を利用していますが、アプリは ImageMagick コマンド ("identify") を実行しようとして失敗します。開発中 (Apache/Passenger を実行している場所) でこの問題を修正するには、Apache 構成で次の環境変数を渡します。

  SetEnv MAGICK_HOME /opt/local/var/macports/software/ImageMagick/6.5.9-0_0+q16
  SetEnv DYLD_LIBRARY_PATH /opt/local/var/macports/software/ImageMagick/6.5.9-0_0+q16/opt/local/lib
  SetEnv PATH /usr/bin:/opt/local/var/macports/software/ImageMagick/6.5.9-0_0+q16/opt/local/bin

ただし、私の実稼働環境では Nginx と Mongrel (私が設定したものではありません) が実行されており、これらの変数をアプリに渡す方法がわかりません。現在、私の nginx.conf ファイルは次のとおりです。

# user and group to run as
user  mouthbreather mouthbreather;

worker_processes  4;

# pid of nginx master process
pid /var/run/nginx.pid;

events {
  worker_connections  8192;
  use epoll;
}

http {

  include /etc/nginx/mime.types;

  default_type  application/octet-stream;

  log_format main '$remote_addr - $remote_user [$time_local] '
                  '"$request" $status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

  access_log  /var/log/engineyard/nginx/access.log  main;
  error_log  /var/log/engineyard/nginx/error.log notice;

  sendfile on;

  tcp_nopush        on;
  tcp_nodelay       on;

  gzip              on;
  gzip_http_version 1.0;
  gzip_comp_level   2;
  gzip_proxied      any;
  gzip_buffers      16 8k;
  gzip_types        text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

  include /etc/nginx/sites/*.conf;
}

だから私の質問は:

  1. 私のMAGICK_HOMEが本番環境のどこにあるかを確認するにはどうすればよいですか?
  2. これらの変数を nginx.conf 経由でアプリに渡すにはどうすればよいですか?

ありがとう!

4

1 に答える 1

4

つまり、nginxを使用して環境変数を介して何も渡さず、HTTPヘッダーまたはfastcgiパラメーターを使用します。

あなたの場合、あなたは物事を適切に行い、別のプロセスとして雑種を実行しているので、あなたはそうする必要さえありません-彼らの環境で環境変数を設定してください。Nginxは適切にそれとは何の関係もありません。

Nginxは環境変数を処理せず、誰かが誤ってサードパーティのモジュールをハッキングして、メインストリームでサポートされなくなるまで、おそらく非常に長い間機能しません。

これには多くの理由がありますが、主に設計、セキュリティ、管理に関連していますが、HTTPdがリソースを処理するように設計されている場合、環境変数を処理することはHTTPdの場所ではないというのが開発者とコミュニティの意見です。同じマシン上にない(近くの別のマシンでリッスンしているプロセスに環境変数を渡すにはどうすればよいですか?)。

さらに、passengerはサードパーティのモジュールであり、nginx内でアプリケーションプロセスを実行するため、nginxの設計に反するという点で、実装と設計の両方の点で多少壊れています(ここでは、理論的には環境変数を渡すことができますが、しかし、それはnginxが機能することを意図した方法ではありません)。

このような処理に推奨される方法は、nginxの外部でアプリケーションを起動し(必要に応じて環境変数を使用して)、プロキシまたはfastcgiのいずれかをアプリケーションに渡し、オプションでヘッダーまたはfastcgiパラメーターに必要な追加データを含めることです。 。または、アプリケーションに、settings.localファイルなどの適切な設定を決定する方法がある場合があります(これはPythonセットアップではかなり一般的です)。

nginxが環境変数を処理せずにこれを行う方法はたくさんあります。

于 2010-04-19T21:04:24.063 に答える