Pregunta

Estoy desarrollando un maestro carriles aplicación que controla otras aplicaciones carriles. Tiene una escritura del golpe para comenzar los carriles de aplicaciones, y funciona bien mientras que se invoca en la línea de comandos manualmente.

Pero si invoco en la materia carriles aplicación, utilizando backticks, system o exec, el script fallará.

El mensaje de error es:

unicorn_rails worker[0] -c ../configs/unicorns/c5.rb -E production must be run inside RAILS_ROOT:
 #<Gem::LoadError: can't activate rack (~> 1.0.0, runtime), already activated rack-1.2.1.
 Make sure all dependencies are added to Gemfile.>

Y aquí está el archivo bash:

cp configs/Gemfile* $1
cd $1
bundle
bundle exec unicorn_rails -c ../configs/unicorns/$1.rb -E production

¿Cómo resolver un problema como este?

Como se puede ver, yo uso bundle exec para iniciar el proceso hijo, que debe tener su propio gemas cargado, ¿verdad?

¿Fue útil?

Solución

Las variables de entorno se pasan por el sistema operativo a Ruby cuando se carga. Rubí añade sus propias variables adicionales, a continuación, inicia rieles, lo que añade aún más.

debe ser capaz de manipularlos jugando con el hash ENV. Esto mostrará lo que se define:

ENV.each { |key, val| puts "#{ key } => #{ val }"}

Se puede ajustar lo que se pasa a los procesos hijo modificando directamente los valores ENV invocando a continuación el código que comienza el niño:

ENV['PATH'] = '/path/to/application'
ENV['PATH'] # => "/path/to/application"

Modificación de la ruta o pelar las entradas no deseadas ENV para limitar el conocimiento de una aplicación de niño del medio ambiente es bastante común.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top