मैं Django 1.6 चला रहा है जो मेरी उत्पादन वेबसाइट तक पहुंचने पर Django Debug टूलबार देखना चाहता हूं। मेरा सर्वर डेबियन 7.8, Nginx 1.2.1, और Gunicorn 19.1.1 चल रहा है। हालांकि, जब मैं अपने इंस्टॉल किए गए एप्लिकेशन के लिए डीडीटी जोड़ने के बाद साइट तक पहुँचने का प्रयास, मैं निम्नलिखित त्रुटि मिलती है:django-debug-toolbar उत्पादन सर्वर से प्रदर्शित नहीं होगा
NoReverseMatch at/
u'djdt' is not a registered namespace
Exception Location: /home/mysite/venv/mysite/local/lib/python2.7/site-packages/django/core/urlresolvers.py in reverse, line 505
Error during template rendering
In template /home/mysite/venv/mysite/local/lib/python2.7/site-packages/debug_toolbar/templates/debug_toolbar/base.html, error at line 12
data-store-id="{{ toolbar.store_id }}" data-render-panel-url="{% url 'djdt:render_panel' %}"
मैं जानता हूँ कि यह अनुशंसित नहीं है कि आप उत्पादन में उपकरण पट्टी चलाने लेकिन मैं सिर्फ जबकि उसे चलाना चाहते हैं मैं सार्वजनिक उपयोग के लिए इसे खोलने से पहले अपने उत्पादन सर्वर पर कुछ परीक्षण करता हूं। जैसा कि आप उम्मीद कर सकते हैं, यह मेरे लैपटॉप पर मेरे विकास पर्यावरण में ठीक काम करता है। मैंने कुछ शोध किया और यह सुनिश्चित किया है कि का उपयोग here के रूप में किया जा रहा है। टूलबार की स्थैतिक फाइलों को मेरे STATIC_ROOT में एकत्रित करने के लिए मैंने "django-admin.py collectstatic" आदेश भी चलाया।
चूंकि मैं प्रॉक्सी सर्वर के पीछे दौड़ रहा हूं, इसलिए मैंने यह सुनिश्चित करने के लिए कुछ मिडलवेयर भी जोड़ा है कि क्लाइंट का आईपी पता मेरे प्रॉक्सी के आईपी पते के बजाय टूलबार के मिडलवेयर में पास किया जा रहा है। इससे समस्या ठीक नहीं हुई।
मैं नीचे दी गई सभी समस्याओं को दिखा रहा हूं जो नीचे दी गई समस्या से संबंधित हैं। क्या मुझे कुछ और याद आ रहा है?
धन्यवाद!
SETTINGS_ROOT = os.path.abspath(os.path.dirname(__file__).decode('utf-8'))
STATIC_ROOT = '/var/www/mysite/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(SETTINGS_ROOT, "../../static"),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.middleware.common.BrokenLinkEmailsMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
TEMPLATE_DIRS = (
os.path.join(SETTINGS_ROOT, "../../templates"),
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Django management commands in 'scripts'
'scripts',
'apps.account',
)
ये उत्पादन केवल सेटिंग्स उत्पादन में आधार सेटिंग्स में जुड़ती:
DEBUG = True # DDT needs this to be True
TEMPLATE_DEBUG = DEBUG
INSTALLED_APPS += (
'django_extensions',
# I'm using Django 1.6
'debug_toolbar',
)
if 'debug_toolbar' in INSTALLED_APPS:
MIDDLEWARE_CLASSES += ('conf.middleware.DjangoDebugToolbarFix',
'debug_toolbar.middleware.DebugToolbarMiddleware',)
# I had to add this next setting after upgrading my OS to Mavericks
DEBUG_TOOLBAR_PATCH_SETTINGS = False
# IP for laptop and external IP needed by DDT
INTERNAL_IPS = ('76.123.67.152',)
DEBUG_TOOLBAR_CONFIG = {
'DISABLE_PANELS': [
'debug_toolbar.panels.redirects.RedirectsPanel',
],
'SHOW_TEMPLATE_CONTEXT': True,
'INTERCEPT_REDIRECTS': False
}
यह मेरा urls.py में है:
if 'debug_toolbar' in dev.INSTALLED_APPS:
import debug_toolbar
urlpatterns += patterns('',
url(r'^__debug__/', include(debug_toolbar.urls)),
)
ये उचित आधार सेटिंग नहीं है
यहां अतिरिक्त मिडलवेयर है:
class DjangoDebugToolbarFix(object):
"""Sets 'REMOTE_ADDR' based on 'HTTP_X_FORWARDED_FOR', if the latter is
set."""
def process_request(self, request):
if 'HTTP_X_FORWARDED_FOR' in request.META:
ip = request.META['HTTP_X_FORWARDED_FOR'].split(",")[0].strip()
request.META['REMOTE_ADDR'] = ip
आज रात मुझे पता चला कि जैसा कि ऊपर दिखाया जब मैं DISABLE_PANELS और SHOW_TEMPLATE_CONTEXT सेटिंग्स कहा, NoReverseMatch त्रुटि दूर चला गया लेकिन डीडीटी अभी भी अपने ब्राउज़र में प्रकट नहीं होता है। – William
मुझे लगता है कि मैं टूलबार नहीं देख सकता क्योंकि मैं Nginx के पीछे हूं जो एक रिवर्स प्रॉक्सी है। टूलबार केवल INTERNAL_IPS सेटिंग में सेट आईपी पते द्वारा देखा जा सकता है। मैं कल इसे देख लूंगा। – William
यह सुनिश्चित करने के लिए मिडलवेयर जोड़ना कि क्लाइंट का पता Nginx से डीडीटी मिडलवेयर से पास किया गया है, समस्या का समाधान नहीं किया। मैंने इस नए मिडलवेयर को दिखाने के लिए उपरोक्त अपना कोड अपडेट किया। – William