Настройка переменных среды для приложений Phusion Passenger
-
09-06-2019 - |
Вопрос
Я настроил Passenger в разработке (Mac OS X), и он работает безупречно.Единственная проблема возникла позже:теперь у меня есть обычай GEM_HOME
путь и двоичные файлы ImageMagick, установленные в "/usr/local"
.Я могу поместить их в один из rc-файлов оболочки, которые будут получены, и это решит переменные среды для процессов, запускаемых из консоли;а как насчет Пассажира?То же приложение не может найти мои драгоценные камни при запуске таким образом.
Решение
Я знаю два решения.Первый (документированный здесь) по сути такой же, как и у manveru — установите переменную ENV непосредственно в вашем коде.
Второй — создать оболочку вокруг интерпретатора Ruby, который использует Passenger и который документирован. здесь (ищите пассажир_с_руби).Суть в том, что вы создаете (и указываете PassengerRuby в конфигурации Apache) /usr/bin/ruby_with_env, исполняемый файл, состоящий из:
#!/bin/bash
export ENV_VAR=value
/usr/bin/ruby $*
Оба работают;Я думаю, что первый подход немного менее хакерский.
Другие советы
Прежде чем выполнять какие-либо требования (особенно перед тем, как требовать рубигемы), вы можете сделать:
ENV['GEM_HOME'] = '/foo'
Это изменит переменную среды внутри этого процесса.
Я обнаружил, что если у вас есть права root на компьютере, вы можете установить необходимые переменные среды в файле «envvars», и apachectl выполнит этот файл перед запуском Apache.
envvars обычно находится в том же каталоге, где находится apachectl — в Mac OS X он находится в /usr/sbin.Если вы не можете его найти, посмотрите исходный код сценария apachectl.
После изменения файла envvars перезапустите Apache с помощью «apachectl -k restart».
Я тоже столкнулся с этой проблемой.Это появляется этот Пассажир не передает значения, установленные с помощью SetEnv
директива apache - что прискорбно.
Возможно, можно было бы установить переменные среды в файле Environment.rb или boot.rb (при условии, что вы говорите о приложении Rails;Я не знаком с Rack, но предположительно у него схожий функционал)