Я ищу решение, я не могу передать apache переменную, определяемую в /etc/profile.
Вот что я пытаюсь установить:
У меня есть приложение django, которое я развертываю через Apache/Passenger (modrails) через интерфейс WGSI.
В моем settings.py я использую эту команду Python: ENVIRONMENT = os.getenv('ENV', 'PROD'), поэтому, если переменная ENVIRONMENT не определена, она по умолчанию переходит к производственным настройкам.
Это помогает мне управлять тем, к какой БД я подключаюсь, и активировать инструменты отладки.
Он работает в производстве, потому что это значения по умолчанию, когда я нахожусь на сервере DEV, я не могу получить переменную среды из /etc/profile.
Он находится на сервере Ubuntu 10.04.
Итак, вот какой тест я сделал:
1) поместить в /etc/profile -> ENV='DEV' экспортировать ENV
2) в /etc/profile.d/environment.sh -> #!/bin/sh ENV='DEV' экспортировать ENV
3) в моем конфигурационном файле виртуального хоста -> PassEnv ENV
4) все еще в моем файле конфигурации виртуального хоста -> SetEnv ENV DEV
5) пассажир требует, чтобы пассажир_wgsi.py зарегистрировал ваше приложение, если я заставлю этот файл viron['ENV'] = 'DEV', это сработало, но я не могу этого сделать
ENVIRONMENT = os.getenv('ENV', 'PROD')
os.environ['ENV'] = ENVIRONMENT
Любая идея, почему или как я могу это исправить? Спасибо!
@Джош
Спасибо за ответ. Но у меня все еще есть некоторые вопросы.
С Passenger единственное, что мне нужно было установить в файле виртуального хоста, — это расположение общей папки внутри моего приложения python/django. Таким образом, мой файл виртуального хоста будет выглядеть так.
DocumentRoot path_to_my_public_folder # /home/user/workspace/myapp/public
Затем в папке myapp находится файлpassage_wsgi.py.
которые очень мало определяют, как вы сказали:
import sys, os
sys.path.append(os.getcwd())
os.environ['DJANGO_SETTINGS_MODULE'] = "myapp.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
и после этих настроек приложение заработало. Так что, возможно, я упустил ваше указание, когда вы говорите, что мы должны указать, какой файл wsgi мы использовали. Я думал, что он напрямую найдет пассажира_wsgi.py и загрузит его по умолчанию, что, похоже, он и делает в данный момент.
Еще одна вещь, которую вы должны знать, это то, что наш проект находится в репозитории SVN, и я хочу настроить этот файл для многих пользователей, чтобы у нас не было разных настроек.
Но то, что я проверю завтра, — это идея иметь один базовый файл wsgi с общей информацией и на основе имени хоста компьютера, из которого я буду импортировать другие настройки, такие как dev_wsgi.py или prod_wsgi.py.
Я должен иметь возможность получить это имя с помощью python и на основе имени я установлю переменные, которые мне нужно использовать.
Спасибо за идею, это очень ценно.
/path/to/production.wsgi
в httpd.conf. Похоже, вы идете по правильному пути, если переменная env все еще не работает. - person Josh Smeaton   schedule 14.02.2011