0

My Rails应用程序使用ImageMagick,但应用程序尝试执行ImageMagick命令(“识别”)时失败。我在通过下面的环境变量在我的Apache配置固定在发展这个问题(在那里我运行的Apache /乘客):如何将ImageMagick环境变量传递给nginx mongrels?

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和杂种(不是我成立),我不知道如何将这些变量传递给应用程序。我的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

简而言之,你不用nginx通过环境变量传递任何东西,你可以使用HTTP头文件或者fastcgi参数。

在你的情况下,你甚至不需要,因为你正在做的事情和作为一个单独的进程运行mongrels - 在环境中设置环境变量。 Nginx与它无关。

Nginx不能使用环境变量,并且很可能在很长一段时间内不会工作,直到有人错误地将第三方模块篡改为它,然后它仍然不会在主流中受支持。

有很多原因,主要是与设计,安全和管理有关,但最终它是开发人员和社区的看法,当HTTPd设计成可以工作时,处理环境变量并不是HTTPd的地方资源可能不在同一台计算机上(您如何将环境变量传递给在附近另一台计算机上侦听的进程?)。

此外,乘客是第三方模块,在实现和设计方面都有些不同,因为它违背了nginx设计的目的,因为它在nginx中运行应用程序进程(在这里你可以通过环境理论上的变量,但它不是nginx工作的方式)。

处理这类事情的推荐方法是在nginx之外启动您的应用程序(如果您愿意,可以使用环境变量),然后代理或fastcgi传递到您的应用程序,可选地包含在头文件或fastcgi params必要的额外数据。或者,您的应用程序可能有一些方法来确定其中的适当设置,如settings.local文件(这在python设置中很常见)。

有很多方法可以做到这一点,而不需要nginx处理环境变量。

相关问题