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處理環境變量。

相關問題