2011-04-30 113 views
12

我試圖部署我的Django應用程序在我的linode服務器與Apache和mod_wsgi。Django + mod_wsgi + apache:導入錯誤在/沒有模塊名爲djproj.urls

file: /srv/www/example.com/djproj/django.wsgi

import os 
import sys 

sys.path.append('/srv/www/example.com/djproj') 

os.environ['PYTHON_EGG_CACHE'] = '/srv/www/example.com/.python-egg' 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

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

file: /etc/apache2/sites-available/example.com

/etc/apache2/sites-available/example.com 
ServerAdmin [email protected] 
ServerName example.com 
ServerAlias www.example.com 

DocumentRoot /srv/www/example.com/public_html 

WSGIScriptAlias//srv/www/example.com/djproj/django.wsgi 

<Directory "/srv/www/example.com/djproj"> 
    Order allow,deny 
    Allow from all 
</Directory> 

ErrorLog /srv/www/example.com/logs/error.log 
CustomLog /srv/www/example.com/logs/access.log combined 

當我訪問我的網站/我得到這個錯誤

Environment: 


Request Method: GET 
Request URL: http://example.com/ 

Django Version: 1.3 
Python Version: 2.6.6 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/usr/local/lib/python2.6/dist-packages/Django-1.3- py2.6.egg/django/core/handlers/base.py" in get_response 
    101.        request.path_info) 
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py 2.6.egg/django/core/urlresolvers.py" in resolve 
    250.    for pattern in self.url_patterns: 
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/core/urlresolvers.py" in _get_url_patterns 
    279.   patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/core/urlresolvers.py" in _get_urlconf_module 
    274.    self._urlconf_module = import_module(self.urlconf_name) 
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/utils/importlib.py" in import_module 
    35.  __import__(name) 

Exception Type: ImportError at/
Exception Value: No module named djproj.urls 

我無法讓它工作。想法?

回答

23

要麼更改您的所有模塊/包裝條目和進口,以排除項目名稱,或將/srv/www/site.com也放入sys.path

+3

這也是我的問題。爲什麼地獄不是在文檔中提到的,儘管!!!!!!!!!!我以爲你只需要指定DJANGO_SETTINGS_MODULE,然後django就可以完成剩下的工作。 – Sam 2011-05-13 12:04:37

+0

請注意,該路徑實際上應該讀取「/srv/www/site.com」**,因爲這與提問者在他們的問題**中提出的內容相匹配。 – 2014-03-20 05:40:40

1

,你必須djproj.urls也許嘗試只是urls

32

我第二伊格納西奧巴斯克斯 - 艾布拉姆斯的answer。您必須將路徑添加到您的項目目錄以及其父目錄sys.path的路徑。這裏是我使用的WSGI腳本文件的一個例子。我將該文件保存在項目目錄中。

import os 
import sys 

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../../"))) 
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))) 

os.environ["DJANGO_SETTINGS_MODULE"] = "PROJECT_NAME.settings" 

from django.core.handlers.wsgi import WSGIHandler 
application = WSGIHandler() 
+0

在渲染時獲取'Caught VariableDoesNotExist:嘗試插入(或追加)'../../'&'時,u'[]'中的鍵[0]失敗查找/'到路徑 – 2011-10-17 06:46:50

+1

哇,你是我的英雄,現在已經爲此戰鬥了3個小時,並沒有想到將東西進一步移動到路徑列表中。我希望我能夠更多的讚揚! – 2014-04-02 22:52:54

+1

你救了我的命!該死的!我花了兩天的時間尋找這個解決方案。謝啦! – 2017-07-09 13:08:01

9

借調ayaz的答案。指定的路徑位於搜索路徑的開始位置很重要,這意味着您需要使用插入..

這是我的。當我做'追加'時,我得到了間歇性問題。這使它堅如磐石。希望這可以幫助。

sys.path.insert(0, '/srv/www/Appname') 
sys.path.insert(1, '/srv/www') 
+0

這可能只是挽救了我的生命和幾個小時的故障排除。 – Clocker 2013-08-20 16:40:29

2

什麼糾正了這個錯誤,我 -

下更改settings.py:

ROOT_URLCONF = '網址'

要這樣:

ROOT_URLCONF =「的myproject。網址'

+0

這也是我身邊的刺。這是原因。我必須搜索(egrep)我的整個網站,以找出它試圖從哪裏獲取urls文件。 – Furbeenator 2012-04-26 15:53:20

5

請按照本教程嘗試 - http://singlas.in/5-step-tutorial-for-using-django-with-apache-and-mod_wsgi/

確保將Django目錄和Django項目目錄都添加到系統路徑中。你的wsgi.py應該看起來像

import os,sys 

#comments 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project.settings") 
sys.path.append('/path/to/your/django/directory/django_project') 
sys.path.append('/path/to/your/django/directory') 

#comments 
from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 
相關問題