2015-01-29 5 views
5

मैं 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 
+0

आज रात मुझे पता चला कि जैसा कि ऊपर दिखाया जब मैं DISABLE_PANELS और SHOW_TEMPLATE_CONTEXT सेटिंग्स कहा, NoReverseMatch त्रुटि दूर चला गया लेकिन डीडीटी अभी भी अपने ब्राउज़र में प्रकट नहीं होता है। – William

+1

मुझे लगता है कि मैं टूलबार नहीं देख सकता क्योंकि मैं Nginx के पीछे हूं जो एक रिवर्स प्रॉक्सी है। टूलबार केवल INTERNAL_IPS सेटिंग में सेट आईपी पते द्वारा देखा जा सकता है। मैं कल इसे देख लूंगा। – William

+0

यह सुनिश्चित करने के लिए मिडलवेयर जोड़ना कि क्लाइंट का पता Nginx से डीडीटी मिडलवेयर से पास किया गया है, समस्या का समाधान नहीं किया। मैंने इस नए मिडलवेयर को दिखाने के लिए उपरोक्त अपना कोड अपडेट किया। – William

उत्तर

0

तो django-debug-toolbar भी चलाने के लिए जावास्क्रिप्ट का उपयोग करता है। क्या आपने पुष्टि की है कि आपके पास अपने सेटअप को प्रभावित करने वाली एन विरोधी विवादित जेएस स्क्रिप्ट हैं? मेरे पास डीजेडीटी का उपयोग करके एक परियोजना के साथ एक समय था और यह एक बैक-टू-टॉप स्क्रिप्ट था जो हस्तक्षेप कर रहा था ...

इसके अलावा, मुझे पता है कि आपके प्रॉक्सी स्थिति को संभालने के लिए आपके पास बहुत सारे कोड हैं, लेकिन यह देखने के लिए कि क्या यह आपके सर्वर पर काम करता है, आप इसे सीधे बॉक्स से बाहर कर सकते हैं? मैं एक नया वर्चुअलनव बना सकता हूं, स्क्रैच से शुरू करें और सुनिश्चित करें कि यह आपके सर्वर पर काम करता है और फिर ऐप्स और अतिरिक्त कॉन्फ़िगरेशन जोड़ने के लिए आगे बढ़ता है।

ये संभवतः आपने सोचा है, लेकिन मैंने सोचा कि मैं उन्हें वैसे भी जोड़ूंगा क्योंकि आपके प्रश्न को अधिक कार्रवाई नहीं मिली है।

शुभकामनाएं।

3

मैं ओपी के रूप में सटीक उसी सेटअप का उपयोग कर रहा हूं, एक अलग डॉकर कंटेनर में सब कुछ चलाने के ध्यान देने योग्य अपवाद के साथ जो प्रत्येक सेवा का आईपी भविष्यवाणी करने के लिए कठिन बनाता है।

इस तरह आप Django डीबग टूलबार के लिए मजबूर हमेशा दिखाने के लिए (केवल स्थानीय रूप से इस का उपयोग, उत्पादन में कभी नहीं) है:

def custom_show_toolbar(request): 
    return True # Always show toolbar, for example purposes only. 

DEBUG_TOOLBAR_CONFIG = { 
    'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar, 
} 
4

असल में, आप अपने उत्पादन सर्वर पर True को DEBUG सेट नहीं करना चाहिए, इसे रखने False और मेरे समाधान जाँच नीचे:

डिफ़ॉल्ट डीडीटी कॉलबैक (debug_toolbar.middleware.show_toolbar) चेकों कर रहे हैं कि DEBUGTrue करने के लिए सेट किया जाना चाहिए, अनुरोध के आईपीमें होना चाहिए, और अनुरोध एक AJAX अनुरोध नहीं होना चाहिए।

सेटिंग्स:

INTERNAL_IPS = ['YOUR.IP.ADDRESS.HERE'] # put your client IP address here (not server IP!) 

DEBUG_TOOLBAR_CONFIG = { 
    'SHOW_TOOLBAR_CALLBACK': lambda request: not request.is_ajax() and request.META.get('REMOTE_ADDR', None) in INTERNAL_IPS 
} 

आप देख सकते हैं HTTP_X_FORWARDED_FOR यदि आप बहुत चाहते हैं, यह आप पर निर्भर है

हम अपने कॉलबैक जो DEBUG सेटिंग हालत शामिल नहीं प्रदान कर सकते हैं।

यूआरएल:

if 'debug_toolbar' in settings.INSTALLED_APPS: 
    import debug_toolbar 

    urlpatterns += [ 
     url(r'^__debug__/', include(debug_toolbar.urls)), 
    ] 
0

मैं इस मुद्दे को ठीक करने के लिए परियोजना url.py फ़ाइल में निम्न जोड़ने के लिए किया था। उस डीबग टूल बार के बाद प्रदर्शित होता है।

from django.conf.urls import include 
from django.conf.urls import patterns 
from django.conf import settings 


    if settings.DEBUG: 
     import debug_toolbar 
     urlpatterns += patterns('', 
       url(r'^__debug__/', include(debug_toolbar.urls)), 
      ) 
संबंधित मुद्दे