Ich habe eine Django App, die auf einem Produktionsserver läuft. Es wird mit Gunicorn 0.14.2 hinter Nginx behandelt. Wenn ich die app (durch Neuladen des gunicorn Arbeiters) neu zu laden, bekomme ich diesen Fehler:Warum gibt Django beim Laden meiner URLconf eine Warnung aus?
Traceback (most recent call last):
File "/opt/nybooks/venv/myapp/lib/python2.6/site-packages/django/core/handlers/base.py", line 101, in get_response
request.path_info)
File "/opt/nybooks/venv/myapp/lib/python2.6/site-packages/django/core/urlresolvers.py", line 250, in resolve
for pattern in self.url_patterns:
File "/opt/nybooks/venv/myapp/lib/python2.6/site-packages/django/core/urlresolvers.py", line 283, in _get_url_patterns
raise ImproperlyConfigured("The included urlconf %s doesn't have any patterns in it" % self.urlconf_name)
ImproperlyConfigured: The included urlconf myapp.urls doesn't have any patterns in it
Andere mit diesem Problem häufig haben festgestellt, dass es während reverse
in einem URLconf Verwendung auftritt, aber ich bin nicht mit reverse
in jedem URLconfs (noch werden sie in Apps von Drittanbietern verwendet). Dieser Fehler nur tritt in der Produktion auf - nie in der Entwicklung (mit dem Django-Dev-Server) oder auf meinem Staging-Server (mit Gunicorn 0.14.2 hinter Nginx). Es scheint auch keine Probleme mit der Website zu anderen Zeiten als beim Nachladen zu verursachen.
Irgendwelche Ideen, was das Problem verursacht?
Hier ist das Haupt URLconf (und der in dem Stack-Trace bezogen):
from django.conf.urls.defaults import *
from django.contrib import admin
from django.conf import settings
from django.http import HttpResponse, Http404
from django.views.generic.simple import direct_to_template, redirect_to
from myapp.apps.magazine.views import *
from myapp.apps.books.views import *
from myapp.apps.forms.views import *
from myapp.apps.blogext.views import *
from myapp.apps.sharing.views import expand_url, email_link_send
from myapp.apps.magazine.feeds import *
from satchmo_utils import urlhelper
from satchmo_store.urls import urlpatterns
from myapp.apps.myapp_shop.views import *
admin.autodiscover()
if settings.SHOP_BASE == '':
shopregex = '^'
else:
shopregex = '^' + settings.SHOP_BASE[1:] + '/'
myapp_patterns = patterns('',
# calendar
(r'^calendar/', include('events.urls')),
# for multimedia SWF access
#(r'^crossdomain.xml$', direct_to_template, {'template': 'crossdomain.xml'}),
# intercept checkout
# TODO: need to use a config value
(r'^catalog/checkout/$', 'myapp.apps.cart.views.myapp_checkout', {'SSL': not settings.LOCAL_DEV}, 'myapp_checkout'),
(r'^catalog/add/$', 'myapp.apps.cart.views.smart_add_wrapper', {}, 'myapp_smart_add'),
# URLs for NYRB apps
(r'^$', direct_to_template, {'template': 'newhomepage.html'}),
(r'^newhomepage/$', direct_to_template, {'template': 'newhomepage.html'}),
(r'^mobile/$', redirect_to, {'url': '/', 'permanent': True}),
(r'^books/authors/', include('myapp.apps.books.urls.authors')),
(r'^books/', include('myapp.apps.books.urls.books')),
(r'^articles/', include('myapp.apps.magazine.urls.articles')),
(
r'^mobile/articles/archives/(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\d{2})/(?P<slug>[-\w]+)/$',
redirect_to,
{'url': '/articles/archives/%(year)s/%(month)s/%(day)s/%(slug)s/', 'permanent': True},
),
# for national poetry month (april)
url(
regex = r'^national-poetry-month/',
view = poetry_month,
name = 'poetry_month',
),
(r'^issues/', include('myapp.apps.magazine.urls.issues')),
(r'^contributors/', include('myapp.apps.magazine.urls.contributors')),
(r'^galleries/', include('myapp.apps.magazine.urls.illustrations')),
(r'^multimedia/', include('myapp.apps.multimedia.urls.multimedia')),
(r'^online/$', direct_to_template, {'template': 'online.html'}),
#(r'^search/', include('myapp.apps.search.urls')),
(r'^search/', include('solango.urls')),
(r'^textareas/', include('myapp.apps.textareas.urls')),
(r'', include('myapp.apps.forms.urls')),
(r'^utils/', include('myapp.apps.utils.urls')),
#(r'^rss/$', 'myapp.apps.magazine.views.rss_list'),
(r'^rss/huffpo/$', redirect_to, {'url': '/articles/feeds/huffpo/', 'permanent': False}),
(r'^rss/googlenews/$', redirect_to, {'url': '/articles/feeds/googlenews/', 'permanent': False}),
(r'^newsletter/', include('myapp.apps.newsletter.urls')),
(r'^subscriptions/', include('myapp.apps.newsubscriptions.urls')),
(r'^shared/', include('myapp.apps.sharing.urls')),
(r'^counter/', include('myapp.apps.counter.urls')),
# Redirects for legacy NYRB system
(r'^nyrev/(\w+)', uber_legacy_article_redirect),
(r'^nyrev/', redirect_to, {'url': '/'}),
(r'contents/(?P<legacy_date>\d+)/', legacy_issue_detail_redirect),
(r'^archives/browse/?$', legacy_browse_archives),
(r'^gallery/gallery-browse/?$', legacy_gallery_browse),
(r'^gallery/', legacy_illustration),
(r'authors/(?P<legacy_author_id>\d+)/', legacy_author_detail_redirect),
#(r'shop/product', legacy_book_detail_redirect),
(r'^shop/product/?$', legacy_product),
(r'^myapp/browse/?$', legacy_book_browse),
(r'blogs/myapplog/post/(\d+)/(?P<slug>[-\w]+)/$', solango_blogsearch_redirect),
# URL shortening
(r'^u/(?P<short_url>[a-zA-Z0-9]+)/$', expand_url),
# NYRB shop
(r'^shop/', include('myapp.apps.myapp_shop.urls')),
(r'^admin/shop/order/csv/?', csv_order_export_day),
(r'^admin/shop/order/(?P<order_id>\d+)/csv/?', csv_order_export),
# URLs for Savoy apps
(r'^tags/', include('savoy.contrib.sections.tag_urls')),
(r'^podcasts/', include('savoy.contrib.podcasts.urls')),
(r'^blogs/$', redirect_to, {'url': "/blogs/myapplog/", 'permanent': False}),
(r'^blogs/', include('savoy.contrib.blogs.urls')),
(r'^media/', include('savoy.core.media.urls')),
# this is to use our own edit profile view
(r'^users/(?P<username>.+)/edit/$', edit_profile),
(r'^users/', include('savoy.core.profiles.urls')),
# django-authopenid
(r'^account/getusername/', get_lost_username),
#(r'account/signin/?', 'myapp.apps.forms.views.dual_login'),
(r'account/signin/?', 'django.contrib.auth.views.login', {'template_name': 'authopenid/signin.html'}),
(r'account/signout/?', 'django.contrib.auth.views.logout', {'next_page': '/'}),
(r'account/sendpw/?', 'myapp.apps.forms.views.dual_sendpw'),
(r'account/resetpw/?', 'myapp.apps.forms.views.reset_pw'),
(r'account/signup/?', 'myapp.apps.forms.views.link_and_signup'),
#(r'^account/', include('django_authopenid.urls')),
# django-mailfriend
(r'^mail_friend/send/?', email_link_send),
(r'^mail_friend/', include('mailfriend.urls')),
# django.contrib.comments
# Django admin (Satchmo additions):
(r'^admin/print/(?P<doc>[-\w]+)/(?P<id>\d+)', 'shipping.views.displayDoc'),
(r'^admin/product/configurableproduct/(?P<id>\d+)/getoptions/', 'product.views.get_configurable_product_options'),
# Orders
(r'^admin/open-orders/$', 'myapp.apps.myapp_shop.views.open_orders'),
# Institutional subscription CSV
(r'^admin/subscriptions/institutionalsubscription\.csv', 'myapp.apps.subscriptions.views.institutional_sub_csv'),
# COUNTER admin for institutional reports
#(r'^admin/institution-counts/multiple-report/csv/$', 'myapp.apps.subscriptions.views.institution_multiple_csv'),
#(r'^admin/institution-counts/multiple-report/$', 'myapp.apps.subscriptions.views.institution_multiple_report'),
(r'^admin/institution-counts/institutions/(?P<id>\d+)/csv/', redirect_to, {'url': '/counter/%(id)s.csv'}),
(r'^admin/institution-counts/institutions/(?P<id>\d+)/$', redirect_to, {'url': '/counter/%(id)s/'}),
#(r'^admin/institution-counts/process_file/?$', 'myapp.apps.subscriptions.views.institution_process_file'),
(r'^admin/institution-counts/$', redirect_to, {'url': '/counter/'}),
# Django admin (standard)
(r'^admin/doc/', include('django.contrib.admindocs.urls')),
(r'^admin/', include(admin.site.urls)),
# custom feeds
(r'^feed/author/(?P<slug>[-\w]+)/$', AuthorFeed()),
)
# attach satchmo patterns after our patterns so we can override if needed
from satchmo_store.urls import urlpatterns
urlpatterns = myapp_patterns + urlpatterns
if settings.DEBUG:
urlpatterns += patterns('django.views.static',
(r'media/(?P<path>.*)', 'serve', {'document_root': settings.MEDIA_ROOT}),
)
Zeigen Sie uns eine bereinigte Version Ihrer urlconf. – agf
Haben Sie verschiedene local_settings.py-Dateien für die Staging- und Produktionsserver? Was sind die Unterschiede zwischen den beiden? Ich dachte, Reverse könnte auch in Ansichten aufgerufen werden. Wenn dies der Fall ist, könnte ein Ansatz mit "teile und herrsche" in Bezug auf die Importimporte das Problem finden. Wenn Sie verschiedene virtuelle envs verwenden, die in jedem env einen pip-freeze-Vorgang ausführen, können Sie einige Unterschiede in der Bibliothek feststellen. – mtnpaul
haben Sie versucht, in irgendeiner Weise diese URL-Konfiguration zu debuggen? Vielleicht kannst du ein paar Prints darin einfügen (in verschiedenen Zeilen ... etwas wie: 'print myapp_patterns' und' printurlpatterns) Öffne danach eine Python-Shell und führe aus: 'from the_app_you_want Importiere URL's und du wirst sehen, was läuft mit deinen URL-Mustern – marianobianchi