Pergunta

Eu estou desenvolvendo um mestre trilhos aplicativo que controla outros trilhos de apps.Ele tem um bash script para iniciar os trilhos de apps, e ele funciona bem, enquanto é invocado na linha de comando manualmente.

Mas se eu o invocar, em matéria trilhos de aplicação, através de backticks, system, ou exec, o script irá falhar.

A mensagem de erro é:

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.>

E aqui é o bash arquivo:

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

Como resolver um problema como este?

Como você pode ver, eu uso bundle exec para iniciar o processo de criança, que deve ter seu próprio gemas carregado, certo?

Foi útil?

Solução

As variáveis de ambiente são passadas pelo sistema de Ruby, quando ela carrega.Ruby adiciona suas próprias variáveis adicionais e, em seguida, começa Trilhos, o que aumenta ainda mais.

Você deve ser capaz de manipulá-los jogando com a ENV hash.Isto irá mostrar o que está definido:

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

Você pode ajustar o que é passado para a criança e processos modificando diretamente o ENV valores, em seguida, invocar o código que inicia a criança:

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

Modificar o caminho, ou descascamento indesejados ENV entradas para limitar a uma criança do aplicativo conhecimento do ambiente é bastante comum.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top