2012-05-11 12 views
6

Prowadzimy serwery ubuntu z Nginx + Phusion Passenger dla naszych aplikacji 3.0x.pasażerowie phusion nie widzą zmiennych środowiskowych?

mam zmienną środowiskową ustawić w pliku/etc/środowiska na maszynach testowych:

MC_TEST=true 

Jeśli uruchomić konsolę (szyny bundle exec c) i wyjście ENV [ "MC_TEST"] widzę „true ". Ale jeśli wstawię ten sam kod na stronie (<% = ENV ["MC_TEST"]%>) to nic nie zobaczy. Ta zmienna nie istnieje.

Co prowadzi mnie do pytania:

1 - Co to jest właściwy sposób, aby dostać się do zmiennych środowiskowych pasażera z nginx (nie apache SetEnv)?

2 - Dlaczego Pasażer nie ma odpowiedniego środowiska?

Odpowiedz

7

Fuzja pasażerów v4 + umożliwia odczyt zmiennych środowiskowych bezpośrednio z pliku bashrc. Upewnij się, że bashrc mieszka w katalogu domowym użytkownika, w ramach którego proces pasażerski jest wykonywany (w moim przypadku było ubuntu na EC2 Linux i nginx)

Oto documentation który idzie w szczegóły bashrc

+0

W tej sekcji dokumentacji wyjaśniono wszystko, czego potrzebujesz na temat zmiennych środowiskowych. Czym są, jak działają, ich własnością i jak przekazywać je do aplikacji obsługiwanych przez Phusion Passenger. – Hongli

+0

Po prostu notatka, ale działa to domyślnie nawet w nieinteraktywnych powłokach. – digicazter

4

Mam taki sam problem z tobą, gdy użyjesz pasażera z skryptem startowym nginx i nginx na ubuntu. Powodem jest to, że używam sudo service nginx restart (instalowanego przez skrypt init), aby uruchomić nginx i
był uruchomiony przez root, a root nie dostał zmiennej środowiskowej użytkownika. Dostępne są dwa rozwiązania. Jednym z nich jest uruchamianie nginx ręcznie.

sudo service nginx stop 
sudo -E /path/to/your/nginx 

nich jest dodać env do nginx Init skrypt

export MC_TEST=true 

To ostatnie rozwiązanie jest jakiś brzydki, ale działa. I myślę, że lepszym sposobem jest znalezienie konfiguracji, która powie skryptowi inicjującemu, aby zachowała login użytkownika.

+0

Uruchamianie nginx ręcznie zrobiłem dla mnie. Dzięki! – Myxtic

0

Mam kolejne brzydkie rozwiązanie.

env_file = '/etc/environment' 
if File.exist?(env_file) 
    text = File.open(env_file).read 
    text.each_line do |line| 
    key, val = line.split('=', 2) 
    ENV[key] = val.strip 
    end 
end 
Powiązane problemy