Python 如何在Django中使用多个设置文件,并在一台服务器上使用多个站点?

Python 如何在Django中使用多个设置文件,并在一台服务器上使用多个站点?,python,django,apache,amazon-ec2,mod-wsgi,Python,Django,Apache,Amazon Ec2,Mod Wsgi,我有一个运行Ubuntu14.04的ec2实例,我想从中托管两个站点。在我的第一个站点上,我有两个设置文件,production_settings.py和settings.py(用于本地开发)。我将本地设置导入生产设置,并使用生产设置文件覆盖任何设置 由于我的生产设置文件不是默认的settings.py名称,因此我必须创建一个环境变量 DJANGO_SETTINGS_MODULE='site1.production_settings' 然而,由于这一点,每当我试图开始我的第二个网站,它说 No

我有一个运行Ubuntu14.04的ec2实例,我想从中托管两个站点。在我的第一个站点上,我有两个设置文件,production_settings.py和settings.py(用于本地开发)。我将本地设置导入生产设置,并使用生产设置文件覆盖任何设置

由于我的生产设置文件不是默认的settings.py名称,因此我必须创建一个环境变量

DJANGO_SETTINGS_MODULE='site1.production_settings'
然而,由于这一点,每当我试图开始我的第二个网站,它说

No module named site1.production_settings
我假设这是由于我设置了环境变量。另一个问题是,我将无法为不同的站点使用不同的设置文件

如何开始为两个不同的网站使用两个不同的设置文件?

编辑:我错过了上面的apache标记,因此我相应地更新了答案

您的问题是,在运行Django应用程序site2时,python解释器不知道site1中的任何模块,因为它没有列在PYTHONPATH中

我强烈建议您在继续之前先阅读一下PYTHONPATH的工作原理:

现在,有很多方法可以解决这个问题,但我们将讨论3个方面:

修改site2的apache virtualhost配置: 首先,请务必阅读这里的文档,了解mod_wsgi v1和v2之间的差异,但当您运行ubuntu 14.04时,无论如何都应该使用mod_wsgi v2

简单,实用。在开发(使用manage.py runserver)和生产之间切换时,这种方法也不会给您带来问题

创建一个simlink

另一个简单的选择是简单地将production_settings.py链接到site2,然后设置DJANGO_settings_MODULE='site2.production_settings'

ln -s /path/to/site1/site1/production_settings.py /path/to/site2/site2/production_settings.py 

如果您在windows计算机上开发,这可能是三种方法中问题最大的一种,因此如果您使用git或任何其他版本控制系统推送到服务器,请确保将新的simlink添加到.gitignore文件或VCS的等效文件中

除了用户帐户中的PYTHONPATH环境变量没有被Apache/mod_wsgi查询之外。需要使用mod_wsgi的配置选项来指定它们,或者在wsgi脚本文件中通过修改sys.path.来实现这一点,这是正确的,但是他对Apache没有任何疑问。标签集提到了“mod wsgi”和“Apache”。这很好地表明他们正在使用mod_wsgi。@GrahamDumpleton你完全正确。。不知道我是怎么跳过的。我已相应地更新了答案。WSGIPythonPath不能位于VirtualHost内部。在Apache配置中,它只能处于“服务器配置”级别。如果有人正在使用mod_wsgi,我非常希望他们没有使用版本1或2。即使版本3现在已经很旧了,并且已经在Linux发行版上运行了很多年。即使在修复了Python模块搜索路径问题之后,也要小心如何在WSGI脚本文件中设置DJANGO_设置_模块。有关原因的更多详细信息,请参阅。
import sys
sys.path.append('/path/to/site1')
ln -s /path/to/site1/site1/production_settings.py /path/to/site2/site2/production_settings.py