¿Cómo paso las variables de entorno de ImageMagick a nginx mongrels?

La aplicación My Rails utiliza ImageMagick, pero la aplicación falla al intentar ejecutar el comando ImageMagick (“identificar”). Solucioné este problema en el desarrollo (donde ejecuto Apache / Passenger) al pasar las siguientes variables de entorno en mi configuración de 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 

Sin embargo, mi entorno de producción está ejecutando Nginx y Mongrel (no es algo que configuré), y no estoy seguro de cómo pasar esas variables a la aplicación. Mi archivo nginx.conf actualmente es el siguiente:

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

Así que mis preguntas son:

  1. ¿Cómo puedo determinar dónde está mi MAGICK_HOME en producción?
  2. ¿Cómo puedo pasar esas variables a la aplicación a través de nginx.conf?

¡Gracias!

En resumen, no pasa nada a través de las variables de entorno con nginx, usa encabezados HTTP o parámetros de fastcgi.

En su caso, ni siquiera lo necesita, porque está haciendo las cosas correctamente y ejecutando a los mestizos como un proceso separado: establezca las variables de entorno en SU ​​entorno. Nginx correctamente no tiene nada que ver con eso.

Nginx no funciona con variables de entorno y probablemente no lo hará durante mucho tiempo hasta que alguien hackee un módulo de terceros para él y luego no sea compatible con la transmisión principal.

Hay una multitud de razones para esto, en su mayoría relacionadas con el diseño, la seguridad y la administración, pero en última instancia, la opinión del desarrollador y la comunidad de que tratar con las variables de entorno no es el lugar de HTTPd cuando HTTPd está diseñado para funcionar con recursos que podrían no estar en la misma máquina (¿cómo pasa las variables de entorno a los procesos que escuchan en otra máquina cercana?).

Además, pasajero es un módulo de terceros y está algo quebrantado en términos tanto de la implementación como del diseño, ya que está en contra de lo que nginx está diseñado porque ejecuta los procesos de aplicación dentro de nginx (aquí PODRÍA pasar las variables de entorno en teoría, pero no es la forma en que nginx está destinado a trabajar).

El método recomendado para manejar cosas como esto es iniciar su aplicación fuera de nginx (haciendo uso de las variables de entorno allí si lo desea) y luego el proxy o fastcgi pasan a su aplicación, incluyendo opcionalmente en encabezados o parámetros de fastcgi los datos adicionales necesarios . Alternativamente, su aplicación puede tener alguna forma de determinar la configuración adecuada dentro de ella, como un archivo settings.local (esto es bastante común en las configuraciones de python).

Hay muchas maneras de hacer esto sin tener que nginx lidiar con las variables de entorno.

    Intereting Posts