2013-05-07 120 views
2

我正在開發一個django應用程序。在開發服務器上,一切正常。 在生產服務器上(使用apache),沒有任何工作。django製作服務器:根路徑

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> 

它是根路徑的問題不承認,還是有其他問題?

非常感謝。

+0

只爲一個良好的模塊的末端是UniPath。它以更正常的人語言方式幫助路徑。 – 2013-05-07 09:01:24

+0

你能多解釋一下還是舉個例子?這是比我使用的更好/更清潔的解決方案嗎? – rom 2013-05-07 09:36:48

+0

這裏是文檔:https://github.com/mikeorr/Unipath – 2013-05-07 10:30:06

回答

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.confwsgiload_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() 

我想你最好還是工作使用絕對路徑,當你得到它的所有工作,然後試着去包容它有可能相對路徑您的需求如果你不得不。

希望它有幫助。

0

在文件wsgi的django項目中。PY我添加這3條線

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

+0

編輯您的答案。格式不正確。 – jogo 2015-11-14 14:26:44