【问题标题】:How do I use multiple settings file in Django with multiple sites on one server?如何在一台服务器上使用多个站点的 Django 中的多个设置文件?
【发布时间】:2014-07-28 22:43:33
【问题描述】:

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

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

DJANGO_SETTINGS_MODULE='site1.production_settings'

但是正因为如此,每当我尝试启动我的第二个网站时,它都会显示

No module named site1.production_settings

我假设这是由于我设置了环境变量。另一个问题是我无法为不同的站点使用不同的设置文件。

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

【问题讨论】:

标签: python django apache amazon-ec2 mod-wsgi


【解决方案1】:

编辑:我错过了 apache 标签,所以我相应地更新了我的答案

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

我强烈建议您先阅读一下 PYTHONPATH 的工作原理,然后再继续:http://www.stereoplex.com/blog/understanding-imports-and-pythonpath

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

修改站点 2 的 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 - appending PYTHONPATH

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

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

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

创建一个simlink

How to symlink a file in 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 的等效文件。

【讨论】:

  • 除非 Apache/mod_wsgi 不参考用户帐户中的 PYTHONPATH 环境变量。需要使用mod_wsgi的配置选项来指定,或者在WSGI脚本文件中修改sys.path来实现。
  • 确实如此,但他的问题中没有关于 Apache 的内容。
  • 标签集提到了“mod-wsgi”和“apache”。这是一个很好的迹象,他们正在使用 mod_wsgi。
  • @GrahamDumpleton 你是完全正确的.. 不知道我是怎么跳过的。我已经相应地更新了我的答案。
  • WSGIPythonPath 不能位于 VirtualHost 内部。它只能进入 Apache 配置中的“服务器配置”级别。如果有人在使用 mod_wsgi,我非常希望他们没有使用版本 1 或版本 2。即使版本 3 现在已经很老了,并且已经在 Linux 发行版上使用了多年。
猜你喜欢
  • 1970-01-01
  • 2010-10-21
  • 2010-11-11
  • 2015-06-21
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
相关资源
最近更新 更多