ruby-on-rails-如何将ImageMagick环境变量传递给nginx mongrels?

我的Rails应用程序使用ImageMagick,但是该应用程序在尝试执行ImageMagick命令(“ identify”)时失败.我通过在Apache配置中传递以下环境变量来解决开发中的问题(正在运行Apache / Passenger):SetEnv MAGICK_HOME /op...

我的Rails应用程序使用ImageMagick,但是该应用程序在尝试执行ImageMagick命令(“ identify”)时失败.我通过在Apache配置中传递以下环境变量来解决开发中的问题(正在运行Apache / Passenger):

  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;
}

所以我的问题是:

>如何确定MAGICK_HOME在生产中的位置?
>如何通过nginx.conf将这些变量传递给应用程序?

谢谢!

解决方法:

简而言之,您不会使用nginx通过环境变量传递任何内容,而是使用HTTP标头或fastcgi参数.

在您的情况下,您甚至不需要,因为您可以正确地处理事务并将mongrels作为单独的进程运行-在THEIR环境中设置环境变量. Nginx与它无关.

Nginx不能与环境变量一起使用,并且可能不会在很长一段时间内出现,直到有人错误地将其与第三方模块一起破解,然后主流仍不支持该模块.

造成这种情况的原因有很多,主要是与设计,安全性和管理相关,但是最终,开发人员和社区认为,当设计HTTPd来处理可能会占用资源的资源时,处理环境变量不是HTTPd的地方.不在同一台计算机上(如何将环境变量传递给在附近另一台计算机上侦听的进程?).

此外,passenger是第三方模块,在实现和设计方面都受到了破坏,因为它在nginx中运行,因为它在nginx中运行应用程序流程(这是理论上您可以传递环境变量,但这不是nginx的工作方式).

推荐的处理此类情况的方法是在nginx之外启动应用程序(如果需要,在其中使用环境变量),然后将proxy或fastcgi传递给您的应用程序,还可以选择在标头或fastcgi params中包含必要的额外数据.另外,您的应用程序可以通过某种方式确定其中的正确设置,例如settings.local文件(这在python设置中非常常见).

有很多方法可以使nginx不处理环境变量.

本文标题为:ruby-on-rails-如何将ImageMagick环境变量传递给nginx mongrels?