我正在开发一个 Django 应用程序。在开发服务器上,一切正常。 在生产服务器上(使用 apache),没有任何工作。
1/我有错误 TemplateDoesNotExist at/。
在我的 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>
是根路径无法识别的问题,还是其他问题?
非常感谢。
最佳答案
好吧,有几件事。使用 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()
我认为你最好使用绝对路径,当你完成所有工作后,如果需要的话,尝试使用相对路径来满足你的需要。
希望对您有所帮助。
关于django 生产服务器 : root path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16415055/