django生产服务器:根路径

时间:2013-05-07 08:57:23

标签: django path root production

我正在开发一个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 /”中搜索“import”而不是在“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>

是否存在无法识别根路径的问题,还是存在其他问题?

非常感谢。

2 个答案:

答案 0 :(得分: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的{​​{1}}指令和虚拟主机内的这一行

load_module

WSGIScriptAlias / C:/Users/ike/Documents/Work/Sincronoz/code/apache/django.wsgi 脚本的别名指定为根目录。

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

django.wsgi

我认为你最好不要使用绝对路径,当你完成所有工作时,如果你需要,可以尝试根据自己的需要调整它,可能需要相对路径。

希望它有所帮助。

答案 1 :(得分:0)

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

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