Настройка переменных среды для приложений Phusion Passenger - PullRequest
7 голосов
/ 17 сентября 2008

Я установил Passenger в разработке (Mac OS X), и он работает безупречно. Единственная проблема возникла позже: теперь у меня есть пользовательский путь GEM_HOME и двоичные файлы ImageMagick, установленные в "/usr/local". Я могу поместить их в один из rc-файлов оболочки, который получен, и это решает переменные среды для процессов, порожденных из консоли; а как насчет пассажира? Это же приложение не может найти мои драгоценные камни при запуске таким способом.

Ответы [ 4 ]

12 голосов
/ 17 сентября 2008

Я знаю два решения. Первый (задокументированный здесь ) по сути такой же, как у manveru - установите переменную ENV непосредственно в своем коде.

Второй - создать оболочку вокруг интерпретатора Ruby, который использует Passenger, и задокументирован здесь (ищите passenger_with_ruby). Суть в том, что вы создаете (и указываете PassengerRuby в своей конфигурации Apache на) / usr / bin / ruby_with_env, исполняемый файл, состоящий из:

#!/bin/bash
export ENV_VAR=value
/usr/bin/ruby $*

Обе работы; я думаю, что прежний подход немного менее хакерский.

2 голосов
/ 12 декабря 2008

Я обнаружил, что если у вас есть права root на компьютере, вы можете установить необходимые переменные среды в файле "envvars", и apachectl выполнит этот файл перед запуском Apache.

envvars обычно находится в том же каталоге, где находится apachectl - в Mac OS X он находится в / usr / sbin. Если вы не можете найти его, посмотрите исходный код скрипта apachectl.

После изменения файла envvars перезапустите Apache с помощью "apachectl -k restart".

2 голосов
/ 17 сентября 2008

Перед тем как выполнить какие-либо действия (особенно перед тем, как требовать рубинов), вы можете сделать:

ENV['GEM_HOME'] = '/foo'

Это изменит переменную среды внутри этого процесса.

1 голос
/ 17 сентября 2008

Я тоже столкнулся с этой проблемой. кажется , что Passenger не передает значения, установленные с помощью директивы apache SetEnv, что не очень хорошо.

Возможно, можно было бы установить переменные окружения в вашем environment.rb или boot.rb (если вы говорите о приложении Rails; я не знаком с Rack, но, предположительно, оно имеет аналогичные функции)

...