2008-09-17 5 views
7

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

+3

Обновление: начиная с Passenger 2.2.3, поддерживается директива SetEnv: http: //blog.phusion.nl/2009/06/17/phusion-passenger-223-released-bug-fix-edition/. Техника от ответа Бена служила мне очень хорошо, но теперь больше не нужно ее использовать (в большинстве случаев). – mislav

ответ

12

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

Во-вторых, создать обертку вокруг интерпретатора Ruby, который использует Пассажир, и задокументирован here (ищите пассажира_with_ruby). Суть в том, что вы создаете (и указать PassengerRuby в вашем Apache конфигурации к)/USR/BIN/ruby_with_env, исполняемый файл, состоящий из:

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

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

+0

На всякий случай кто-то сталкивается с той же проблемой, что и у меня: не забудьте «chmod + x/usr»/bin/ruby_with_env'. –

+0

Поскольку это старый ответ, я просто хочу подтвердить, что этот ответ по-прежнему является рекомендуемым способом решения этой проблемы. Дополнительные ссылки: http://blog.phusion.nl/2008/12/ 16/pass-environment-variables-to-ruby-from-phusion-пассажир/и: http://dev.mensfeld.pl/2011/09/phusion-passenger-and-environment-variables-with-ruby-rake- приложения/ – Felixyz

+0

В последнее время выглядит так: c повешен. С Phusion 4.0 вы можете использовать директивы Apache «PassEnv» и «SetEnv»: http://www.modrails.com/documentation/Users%20guide%20Apache.html#env_vars_passenger_apps – nielsbot

1

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

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

2

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

ENV['GEM_HOME'] = '/foo' 

Это изменит переменные окружения внутри этого процесса.

2

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

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

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