我正在寻找解决方案,我无法将/ apache变量定义传递给/ etc/profile。Django - 无法将环境变量传递给WSGI接口上的Apache/Passenger
这里是我想设置:
我有我通过Apache /乘客(modrails)通过WGSI接口部署Django应用程序。
在我的settings.py我使用这条巨蟒的命令: 环境= os.getenv(“ENV”,“PROD”) 所以如果环境变量没有定义它在默认情况下进入到生产设置。
这帮助我管理哪些数据库连接并激活调试工具。
它在生产中工作,因为它是默认值,当我在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)乘客要求passenger_wgsi.py注册您的应用程序,如果我在这个文件中 病毒粒子[ 'ENV' 逼] =“DEV”这走了一个工作,但我不能做到这一点
ENVIRONMENT = os.getenv('ENV', 'PROD')
os.environ['ENV'] = ENVIRONMENT
任何想法,为什么或如何解决这个问题? 谢谢!
@Josh
感谢您的答复。但我仍然有一些问题。
使用Passenger时,我必须在虚拟主机文件 中设置的唯一东西是我的python/django应用程序内公用文件夹的位置。 所以我的虚拟主机文件看起来像这样。
DocumentRoot path_to_my_public_folder # /home/user/workspace/myapp/public
然后在myapp文件夹里面有passenger_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文件。我虽然它会直接找到passenger_wsgi.py,并默认加载它看起来 目前正在做的事情。
你应该知道的另一件事是,我们的项目是在SVN存储库中,我想为许多用户设置这个文件,所以我们没有不同的设置。
但我会测试tomorow是具有一个基本的WSGI文件与计算机的主机名的公共信息 和基础,我会从像dev_wsgi.py导入其他设置或prod_wsgi.py的想法
我应该能够检索这个名称与python和基于名称我将设置我需要使用的变量。
谢谢你的想法,非常感谢。
对不起,我以前没有和Passenger一起工作过。我唯一的经验是使用Apache,我们必须在httpd.conf中定义`/ path/to/production.wsgi`。听起来就像你正朝着正确的轨道前进,如果env变量仍然不起作用。 – 2011-02-14 04:49:10