Configurando variáveis de ambiente para aplicativos Phusion Passenger
-
09-06-2019 - |
Pergunta
Configurei o Passenger em desenvolvimento (Mac OS X) e funciona perfeitamente.O único problema veio depois:agora eu tenho um costume GEM_HOME
path e binários do ImageMagick instalados em "/usr/local"
.Posso colocá-los em um dos arquivos shell rc originados e isso resolve as variáveis de ambiente para processos gerados no console;mas e o Passageiro?O mesmo aplicativo não consegue encontrar minhas joias quando executado dessa maneira.
Solução
Conheço duas soluções.O primeiro (documentado aqui) é essencialmente igual ao de manveru – defina a variável ENV diretamente em seu código.
A segunda é criar um wrapper em torno do interpretador Ruby que o Passenger usa e está documentado aqui (procure passageiro_com_ruby).A essência é que você crie (e aponte PassengerRuby em sua configuração do Apache para) /usr/bin/ruby_with_env, um arquivo executável que consiste em:
#!/bin/bash
export ENV_VAR=value
/usr/bin/ruby $*
Ambos funcionam;a primeira abordagem é um pouco menos hackeada, eu acho.
Outras dicas
Antes de fazer qualquer exigência (especialmente antes de exigir rubygems), você pode fazer:
ENV['GEM_HOME'] = '/foo'
Isso mudará a variável de ambiente dentro deste processo.
Eu descobri que se você tiver privilégios de root no computador, poderá definir as variáveis de ambiente necessárias no arquivo "envvars" e o apachectl executará esse arquivo antes de iniciar o Apache.
envvars normalmente está localizado no mesmo diretório onde o apachectl está localizado - no Mac OS X ele está localizado em /usr/sbin.Se você não conseguir encontrá-lo, procure na fonte do script apachectl.
Após alterar o arquivo envvars, reinicie o Apache com "apachectl -k restart".
Eu também me deparei com esse problema.Isto parece que o passageiro não transmite valores definidos usando o SetEnv
diretiva Apache - o que é lamentável.
Talvez seja possível definir variáveis de ambiente em seu ambiente.rb ou boot.rb (supondo que você esteja falando sobre um aplicativo Rails;Não estou familiarizado com o Rack, mas provavelmente ele possui funcionalidade semelhante)