我有一个django(1.6.x)项目,可以在开发服务器上正常运行,但是在Ubuntu 12.04.3上的Apache2(2.2.22.1)和mod_wsgi(3.3-4)下运行失败,并显示错误消息
配置不当:所包含的urlconf erp.urls中没有任何模式
我不明白为什么它可以与开发服务器一起使用,但不能与Apache2 / mod_wsgi一起使用,我发现很难跟踪错误的出处。
还有许多其他类似的SO问题,但是我使用反向的唯一地方(先前发现的一个问题)是我模型中的get_absolute_url-应该没问题吗?
该项目设置为la Two Scoops样式,尤其是以下布局:
<repository_root>/<django_project_root>/<configuration_root>/
转换为:
erp_root/erp/erp/
和设置是
erp_root/erp/erp/settings/*py(包括__init__.py)
erp / urls.py; from django.conf import settings from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}), url(r'^admin/', include(admin.site.urls)), url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}, name='login'), url(r'^logout/$', 'django.contrib.auth.views.logout_then_login', {}, name='logout'), url(r'^search/', include('haystack.urls')), url(r'^inventory/', include('inventory.urls')), ) if settings.DEBUG: import debug_toolbar urlpatterns += patterns('', url(r'^__debug__/', include(debug_toolbar.urls)), )
和库存/ urls.py:
from django.conf.urls import url, patterns from .forms import CarrierWizardForm1, CarrierWizardForm2, MovementWizardForm1,MovementWizardForm2 from . import views carrier_wizard_forms = [CarrierWizardForm1, CarrierWizardForm2] movement_wizard_forms = [MovementWizardForm1, MovementWizardForm2] urlpatterns = patterns('', url(r'^$', views.PartNumberListView.as_view(), name='inventory_list_index'), url(r'^parttype/$', views.part_type_list, name='index'), url(r'^parttype/(?P<parttype>\d{2})/$', views.part_type_view, name='part_type_view'), url(r'^partnumber/$', views.PartNumberListView.as_view(), name='partnumber_list'), url(r'^partnumber/add/$', views.PartNumberCreateView.as_view(), name='partnumber_add'), url(r'^partnumber/(?P<slug>[-\w]+)/$', views.PartNumberView.as_view(), name='partnumber_view'), url(r'^partnumber/(?P<slug>[-\w]+)/update/$', views.PartNumberUpdateView.as_view(), name='partnumber_update'), url(r'^partnumber/(?P<slug>[-\w]+)/delete/$', views.PartNumberDeleteView.as_view(), name='partnumber_delete'), .... )
erp / settings / dev.py:
# Django settings for erp project. # settings.py from unipath import Path PROJECT_DIR = Path(__file__).ancestor(3) MEDIA_ROOT = PROJECT_DIR.child("media") STATIC_ROOT = PROJECT_DIR.child("static") STATICFILES_DIRS = ( PROJECT_DIR.child("assets"), ) TEMPLATE_DIRS = ( PROJECT_DIR.child("templates"), ) DEBUG = True TEMPLATE_DEBUG = DEBUG TIME_ZONE = 'Australia/Melbourne' LANGUAGE_CODE = 'en-au' SITE_ID = 1 USE_TZ = True DATE_FORMAT = 'd/m/y' SHORT_DATE_FORMAT = 'd/m/y' # URL that handles the media served from MEDIA_ROOT. Make sure to use a # trailing slash. # Examples: "http://example.com/media/", "http://media.example.com/" MEDIA_URL = '' # Absolute path to the directory static files should be collected to. # Don't put anything in this directory yourself; store your static files # in apps' "static/" subdirectories and in STATICFILES_DIRS. # Example: "/var/www/example.com/static/" STATIC_ROOT = '' # URL prefix for static files. # Example: "http://example.com/static/", "http://static.example.com/" STATIC_URL = '/static/' STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', ) # List of callables that know how to import templates from various sources. TEMPLATE_LOADERS = ( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ) MIDDLEWARE_CLASSES = ( 'debug_toolbar.middleware.DebugToolbarMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'stronghold.middleware.LoginRequiredMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) ROOT_URLCONF = 'erp.urls' # Python dotted path to the WSGI application used by Django's runserver. WSGI_APPLICATION = 'erp.wsgi.application' INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', 'django.contrib.formtools', 'django.contrib.humanize', 'inventory', 'django_extensions', 'extra_views', 'debug_toolbar', 'django_tables2', 'stronghold', 'bootstrap3', 'haystack', ) LOGIN_URL = '/login' LOGOUT_URL = '/logout' # For Stronghold STRONGHOLD_PUBLIC_NAMED_URLS = ( 'login', 'logout', ) # This is required by the debug toolbar middleware INTERNAL_IPS = ('192.168.0.16','0.0.0.0','127.0.0.1','::1', '192.168.0.115') # This is reqquired by django_tables2 TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth", "django.core.context_processors.debug", "django.core.context_processors.i18n", "django.core.context_processors.media", "django.core.context_processors.static", "django.core.context_processors.tz", "django.contrib.messages.context_processors.messages", "django.core.context_processors.request" ) } LOGIN_REDIRECT_URL = '/inventory/' DEBUG_TOOLBAR_PANELS = [ 'debug_toolbar.panels.versions.VersionsPanel', 'debug_toolbar.panels.timer.TimerPanel', 'debug_toolbar.panels.settings.SettingsPanel', 'debug_toolbar.panels.headers.HeadersPanel', 'debug_toolbar.panels.request.RequestPanel', 'debug_toolbar.panels.sql.SQLPanel', 'debug_toolbar.panels.staticfiles.StaticFilesPanel', 'debug_toolbar.panels.templates.TemplatesPanel', 'debug_toolbar.panels.cache.CachePanel', 'debug_toolbar.panels.signals.SignalsPanel', 'debug_toolbar.panels.logging.LoggingPanel', ] def show_toolbar(request): return True # Always show toolbar, for example purposes only. DEBUG_TOOLBAR_CONFIG = { 'INTERCEPT_REDIRECTS': False, 'INSERT_BEFORE': '</body>', 'ENABLE_STACKTRACES': True, } # This is required for Haystack - the search engine HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.solr_backend.SolrEngine', 'URL': 'http://127.0.0.1:8085/solr/erp', }, }
我的wsgi是具有次要设置mod的标准:
import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "erp.settings.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
我的apache2 / sites-avail / erp.conf是:
<VirtualHost *:80> ServerName deverp ServerAdmin administrator DocumentRoot /path/www/dev/erp/erp/ ErrorLog /var/log/apache2/dev/error.log CustomLog /var/log/apache2/dev/access.log combined WSGIDaemonProcess deverp python-path=/path/www/dev/erp/erp:/path/.virtualenvs/erp-dev/lib/python2.7/site-packages WSGIProcessGroup deverp WSGIScriptAlias / /path/www/dev/erp/erp/erp/wsgi.py <Directory /path/www/dev/erp/erp/erp> <Files wsgi.py> Order deny,allow Allow from all </Files> </Directory> </VirtualHost>
此,我实际上遇到了类似的问题。巧合的是,你在发布django-stronghold的问题后。实际上,此问题是由于django-debug-toolbar中缺少设置所致。
你缺少的设置是:
DEBUG_TOOLBAR_PATCH_SETTINGS = False
它可以与runserver一起使用,但是如果你尝试使用honcho,gunicorn或其他使用WSGI接口的工具运行它,则会崩溃。
希望这可以帮助!