我正在寻找解决方案,我无法将 /etc/profile 中定义的变量传递给 apache。
这是我要设置的内容:
我有一个 django 应用程序,我通过 WGSI 接口通过 Apache/Passenger (modrails) 部署它。
在我的 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) 如果我在此文件中强制使用viron['ENV'] = 'DEV',乘客需要一个passenger_wgsi.py 来注册您的应用程序,但我无法做到这一点
ENVIRONMENT = os.getenv('ENV', 'PROD')
os.environ['ENV'] = ENVIRONMENT
知道为什么或如何解决这个问题吗?谢谢你!
@乔希
谢谢回复。但我还有一些问题。
使用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 存储库中,我想为许多用户设置此文件,因此我们没有不同的设置。
但是我明天要测试的是拥有一个包含公共信息的基本 wsgi 文件并基于计算机的主机名的想法,我将从 dev_wsgi.py 或 prod_wsgi.py 等导入其他设置
我应该能够使用 python 检索此名称,并根据名称设置我需要使用的变量。
谢谢你的想法,非常感谢。