部署 django 应用程序时,应在 Apache 中将 DJANGO_SETTINGS_MODULE 设置为为何?

部署 django 应用程序时,应在 Apache 中将 DJANGO_SETTINGS_MODULE 设置为为何?

我正在部署一个 Django 应用,但似乎无法在 Apache 配置中正确设置。我已将 Django 应用放在 /path/to/mysite.com/teabag/current/ 中

  DirectoryIndex index.html
  DocumentRoot /path/to/mysite.com/teabag/current/

  <Location "/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE settings_production
    PythonPath "['/path/to/mysite.com/teabag/current'] + sys.path"
    PythonDebug On
  </Location>

  <Location "/media/">
    SetHandler None
  </Location>

  <LocationMatch "\.(jpg|gif|png)$">
    SetHandler None
  </LocationMatch>

但它给了我这个错误:

ImportError: Could not import settings 'settings_production' (Is it on sys.path? Does it have syntax errors?): No module named settings_production

我怀疑我的 python 路径不正确。它应该比 /path/to/mysite.com/teabag 高一级,因此设置应该是“current.settings_production”

我有点困惑,如果能得到任何帮助我将非常感激,谢谢。

答案1

您使用的 PythonPath 值应包括您要在应用程序中导入的所有模块的父目录。它还应包括 DJANGO_SETTINGS_MODULE 位置的父目录。

我猜是:

SetEnv DJANGO_SETTINGS_MODULE current.settings_production
PythonPath "['/path/to/mysite.com/teabag/'] + sys.path"

答案2

我同意 rkthkr 对你的问题的回答,但我注意到了这一点。

DocumentRoot /path/to/mysite.com/teabag/current/

这不会造成安全问题吗?这会让某人访问您的应用程序代码。没有必要将您的 DocumentRoot 指向您的应用程序目录。您的所有静态媒体都应从单独的目录中提供。如果您使用的是 Linux 系统,您可以将您的媒体从您的应用程序目录符号链接到您的 DocumentRoot 目录。

相关内容