3

我正在开发一个 django 应用程序。在开发服务器上,一切正常。在生产服务器上(使用 apache),没有任何工作。

1/ 我在 / 处有错误 TemplateDoesNotExist

在我的 settings.py 文件中:

SITE_ROOT = os.path.abspath(os.path.dirname(__name__)). 这是项目根路径。

templateDir = os.path.join(SITE_ROOT, 'templates/')
TEMPLATE_DIRS = (
    templateDir
)

这是模板路径。

2/ 如果我用项目的绝对路径更改 SITE_ROOT:

SITE_ROOT="/var/www/europolix"

模板似乎可以识别,但我还有另一个错误: 没有名为 getEurlexIdsFunctions 的模块 这是代码:

import sys
sys.path.append('import')
import getEurlexIdsFunctions as eurlexIds 

我认为问题再次来自相对路径。Apache 似乎在“var/www/”而不是“var/www/europolix/”中搜索“导入”。我对吗?

这是我的apache配置:

WSGIScriptAlias /europolix /var/www/europolix/europolix/wsgi.py
WSGIPythonPath /var/www/europolix/
<Directory /var/www/europolix/>
   <Files wsgi.py>
       Order deny,allow
       Allow from all
   </Files>
</Directory>

是根路径不识别的问题,还是有其他问题?

非常感谢。

4

2 回答 2

1

嗯,有几件事。使用时settings.py最好将所有路径声明为绝对路径。我在您的代码中看到您有这一行

SITE_ROOT = os.path.abspath(os.path.dirname(__name__))

对于站点的根目录,但我认为如果您使用__file__全局变量而不是__name__. 像这样:

SITE_ROOT = os.path.abspath(os.path.dirname(__file__))

我在生产服务器中有一个 django 应用程序,我需要添加的httpd.conf只是虚拟主机wsgi中的指令和这条线load_module

WSGIScriptAlias / C:/Users/ike/Documents/Work/Sincronoz/code/apache/django.wsgi

将脚本的别名指定django.wsgi为根。

然后在django.wsgi脚本中我有这个代码:

import os, sys
sys.path.append(r'<full site root to where is settings.py>')
os.environ['DJANGO_SETTINGS_MODULE'] = 'my_project_module.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

我认为您最好使用绝对路径,当您完成所有工作时,如果必须,请尝试使用相对路径来满足您的需求。

希望能帮助到你。

于 2013-05-07T12:52:42.683 回答
0

在 wsgi.py 文件中的 django 项目中,我添加了这 3 行

import sys
DJANGO_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')
sys.path.append(DJANGO_PATH)

于 2015-11-14T13:52:41.323 回答