繁体   English   中英

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

[英]How do I use multiple settings file in Django with multiple sites on one server?

我有一个运行Ubuntu 14.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的工作方式进行简短的阅读: http : //www.stereoplex.com/blog/understanding-imports-and-pythonpath

现在,有很多方法可以解决此问题,但我们将介绍3:

修改site2的apache虚拟主机配置:

首先,请务必阅读此处的文档,以了解mod_wsgi v1和v2之间的差异,但在运行ubuntu 14.04时,无论如何都应使用mod_wsgi v2。

https://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIPythonPath

<virtualhost *:80>
    # your existing config directives
    WSGIPythonPath /path/to/site1
</virtualhost>

这样做的好处是,在开发计算机上运行site2时,不修改任何应用程序代码,并且PYTHONPATH中的目录可能无效。

在您的python代码中附加路径

Python sys.path-附加PYTHONPATH

在您的site2.wsgi文件中,在启动Django应用之前,添加以下代码。

import sys
sys.path.append('/path/to/site1')

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

创建一个simlink

如何在Linux中符号链接文件?

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

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

如果您是在Windows机器上进行开发,则这可能是3种方法中最棘手的问题,因此,如果要使用git或任何其他版本控制系统推送到服务器,请确保将新的simlink添加到.gitignore文件或您的VCS等效文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM