0

내 Rails 앱은 ImageMagick을 사용하지만 ImageMagick 명령 ("식별")을 실행하려고하면 앱이 실패합니다. 내 아파치 설정에서 다음과 같은 환경 변수를 전달하여 (I 아파치/승객을 실행 해요) 개발에서이 문제를 해결 :ImageMagick 환경 변수를 nginx 잡종에 어떻게 전달합니까?

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에와 잡종 (내가 설정하지 뭔가를 실행), 그리고 그 변수를 앱에 전달하는 방법을 잘 모르겠습니다.

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

그래서 제 질문은 다음과 같습니다 : 다음과 같이 내 nginx.conf 파일은 현재

  1. 어떻게 내 MAGICK_HOME 생산에 어디에서 확인할 수 있습니까?
  2. 어떻게 이러한 변수를 nginx.conf를 통해 앱에 전달할 수 있습니까?

고마워요!

답변

4

요약하면 nginx를 사용하여 환경 변수를 통해 아무 것도 전달하지 않고 HTTP 헤더 또는 fastcgi 매개 변수를 사용합니다.

제대로 작동하고 잡종을 별도의 프로세스로 실행하므로 환경에 환경 변수를 설정하지 않아도됩니다. Nginx 제대로 그것을 함께 할 수 없습니다.

Nginx는 환경 변수와 함께 작동하지 않으며 실수로 타사 모듈을 해킹하여 실수로 메인 스트림에서 지원되지 않을 때까지 아주 오랜 시간 동안 사용할 수 없습니다.

주로 설계, 보안, 관리와 관련된 여러 가지 이유가 있지만 궁극적으로 환경 변수를 다루는 것이 HTTPd가 작동하도록 설계되었을 때 환경 변수를 다루는 것이 HTTPd의 위치가 아니라는 개발자와 커뮤니티의 의견입니다. 같은 머신에 있지 않을 수도있는 리소스를 가지고 있습니다 (주변의 다른 머신에서 수신하는 프로세스에 환경 변수를 어떻게 전달합니까?).

승객은 제 3 자 모듈이며, nginx가 nginx 내에서 애플리케이션 프로세스를 실행하기 때문에 설계된 것과 반대되는 점에서 구현 및 디자인면에서 다소 부적절합니다 (여기서는 환경을 통과 할 수 있음). 이론적으로는 변수이지만 nginx가 작동하는 방식이 아닙니다.)

이런 일을 처리하는 데 권장되는 방법은 응용 프로그램을 nginx (원하는 경우 환경 변수를 사용) 외부에서 시작한 다음 프록시 또는 fastcgi를 응용 프로그램에 전달하는 것입니다 (선택 사항으로 헤더 또는 fastcgi 매개 변수 포함). 필요한 추가 데이터. 또는 응용 프로그램에서 settings.local 파일과 같은 적절한 설정을 결정할 수있는 방법이있을 수 있습니다 (파이썬 설정에서 상당히 일반적입니다).

nginx가 환경 변수를 처리하지 않고이를 수행하는 방법은 수없이 많습니다.