DEBUG = মিথ্যা সেটিং কেন আমার জ্যাঙ্গো স্থির ফাইল অ্যাক্সেস ব্যর্থ করে?


355

জ্যাঙ্গোকে আমার কাজের ঘোড়া হিসাবে ব্যবহার করে একটি অ্যাপ তৈরি করছি। এখন পর্যন্ত সমস্ত কিছু ঠিকঠাক হয়েছে - নির্দিষ্ট ডিবি সেটিংস, কনফিগার করা স্ট্যাটিক ডিরেক্টরি, ইউআরএল, দর্শন ইত্যাদি But তবে সমস্যাটি আমার নিজের সুন্দর এবং কাস্টম 404 এইচটিএমএল এবং 500.html পৃষ্ঠাগুলি রেন্ডার করতে চেয়েছিল এমন মুহুর্তের মধ্যেই লুকানো শুরু হয়েছিল।

আমি কাস্টম ত্রুটি হ্যান্ডলিংয়ের দস্তাবেজগুলি পড়েছি এবং UrlsConf এ প্রয়োজনীয় কনফিগারেশন সেট করেছি, সম্পর্কিত ভিউ তৈরি করেছি এবং আমার অ্যাপ্লিকেশনটির টেম্পলেট ডিরেক্টরিতে 404.html এবং 500.html যুক্ত করেছি (সেটিংস.পি-তেও নির্দিষ্ট)।

তবে দস্তাবেজগুলি বলছে you can actually view custom error views until Debug is Off, তাই আমি আমার স্টাফগুলি পরীক্ষা করার জন্য এটি বন্ধ করে দিয়েছিলাম, এবং তখনই জিনিসগুলি নীরব হয়ে যায়!

আমি কেবল কাস্টম 404 এইচটিএমএল দেখতে ব্যর্থ হই না (আসলে এটি লোড হয় তবে আমার ত্রুটি পৃষ্ঠাগুলিতে প্রতিটি গ্রাফিক ত্রুটির বার্তা রয়েছে - কিছু সুন্দর চিত্র রয়েছে), ত্রুটি পৃষ্ঠার লোডের উত্স, তবে আর কিছুই বোঝা যায় না! এমনকি সিএসএস বা জাভাস্ক্রিপ্ট লিঙ্ক করা হয়নি!

সাধারণত, আমি একবার সেট করে নিলে, DEBUG = Falseসমস্ত দর্শন লোড হবে তবে কোনও লিঙ্কযুক্ত সামগ্রী (সিএসএস, জাভাস্ক্রিপ্ট, চিত্রগুলি ইত্যাদি) লোড হবে না! কি হচ্ছে? স্ট্যাটিক ফাইল এবং DEBUGসেটিং সম্পর্কিত কোনও কিছু অনুপস্থিত রয়েছে ?


আপনি কীভাবে হোস্টিং করছেন? লোকাল মেশিন টেস্ট সার্ভার দিয়ে?
j_syk

পরীক্ষার সার্ভার সহ স্থানীয় মেশিন। আমি মূলত দেখতে চাই যে আমার কাস্টম ত্রুটি পরিচালনার কাজটি স্থানীয়ভাবে যেমন অ-বিদ্যমান পৃষ্ঠাগুলি অ্যাক্সেস করা এবং রান-টাইম ত্রুটিগুলি ঘটানোর মতো পরিস্থিতিতে সিমুলেট করে কীভাবে কাজ করবে - তবে আমার স্থির সামগ্রীটি লোড হবে না।
nemesisfixx

হয় এটি এখানকার মতো সার্ভার স্তরেও করা যেতে পারে বা urlpattern যুক্ত করে এটি জ্যাঙ্গো স্তরে পরিচালনা করা যায়। আমি একই সমস্যার জন্য নীচের এই প্রশ্নটি পেয়েছি। stackoverflow.com/questions/6405173/…
পঙ্কজ আনন্দ

উত্তর:


353

ডিবাগ বন্ধ হয়ে যাওয়ায় জাঙ্গো আপনার আর কোনও স্ট্যাটিক ফাইল হ্যান্ডেল করবে না - আপনার প্রোডাকশন ওয়েব সার্ভার (অ্যাপাচি বা কিছু) এর যত্ন নেওয়া উচিত।


3
এটি আসলে আমার কৌতূহলকে মীমাংসা করে, তাই এখন এটি বোধগম্য হয়, এবং প্রয়োজনে প্রয়োজনে আমি অ্যাপাচি দিয়ে সত্যই যত্ন নিতে পারি। আমি আমার নিজের সেটিংসে এটি সমস্যা বলে মনে করেছি। ধন্যবাদ
nemesisfixx

5
আমি এই উত্তরটি খুব সহায়ক বলে মনে করেছি। অন্য কেউ যদি আমার একই পরিস্থিতিতে থাকে (ননরেল জাঙ্গো সহ অ্যাপ্লিকেশনটির জন্য গুগল অ্যাপ ইঞ্জিন ব্যবহার করছেন): অ্যাপ.আইএমএল আপডেট করতে ভুলবেন না।
লিন্ডে ফার্গুসন

3
হ্যান্ডলারগুলি: - ইউআরএল: / স্ট্যাটিক স্ট্যাটিক_ডির: স্ট্যাটিক
লিন্ডসে ফার্গুসন

475

আপনার যদি এখনও স্থানীয়ভাবে স্ট্যাটিক সার্ভারের প্রয়োজন হয় (উদাহরণস্বরূপ ডিবাগ ছাড়াই পরীক্ষার জন্য) আপনি অনিরাপদ মোডে ডেভারভার চালাতে পারেন:

manage.py runserver --insecure

6
যদিও এই পতাকাটি কাজ করে, এটি সংগ্রাহক ফোল্ডার থেকে সামগ্রীটি পরিবেশন করে না
হাওয়ে

5
এটা যাদু। ধন্যবাদ স্যার, আপনি একজন নায়ক এই উত্তরটি গ্রহণযোগ্য উত্তরের সাথে একত্রীকরণ করা উচিত কারণ এটি জ্যাঙ্গোর চেয়ে অন্য কোনও উপায়ে স্ট্যাটিক পরিবেশন না করেই সমস্যার সমাধান করে।
ডিপাদো

1
এটাই আমার দরকার ছিল। যদিও সর্বোত্তম অনুশীলন হ'ল পরিবেশ ও পরিবর্তনশীলকে বিকাশ এবং উত্পাদন পরিবেশ এবং ডিবাগ টগলের মধ্যে পার্থক্য করতে ব্যবহার করা।
নীরজ গুপ্ত


9
এ সম্পর্কে এতটা অনিরাপদ হলেও কেউ আমাকে বলতে পারেন
কবি বৈদ্য

36

আপনি উত্পাদন স্থিতিশীল ফাইল পরিবেশন করতে হোয়াইটনয়েস ব্যবহার করতে পারেন ।

ইনস্টল করুন:

pip install WhiteNoise

এবং আপনার wsgi.py ফাইলটি এতে পরিবর্তন করুন :

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

এবং আপনি যেতে ভাল!

হ্যান্ডলবার ক্রিয়েটিভ ব্লগে ক্রেডিট ।

কিন্তু, বাস্তবে এইভাবে উত্পাদনের ক্ষেত্রে স্থির ফাইলগুলি পরিবেশন করার প্রস্তাব দেওয়া হয় না। আপনার প্রোডাকশন ওয়েব সার্ভারের (এনগিনেক্সের মতো) এটির যত্ন নেওয়া উচিত।


1
আকর্ষণীয় মনে হচ্ছে, তবে কেবল wgsi.pyফাইলটিতে সেই লাইনটি যুক্ত করে আমার পক্ষে কাজ করেনি । আপনি যে ডকুমেন্টটি সংযুক্ত করেছেন তাতে হোয়াইটনয়েস ব্যবহারের জন্য অন্যান্য নির্দেশনা দেওয়া হয়েছে বলে মনে হচ্ছে। অন্যান্য উপায়ে চেষ্টা করবে এবং আপনাকে এখানে আপডেট করবে।
ডার্কসিগনাস

এই হিসাবে শেষ পর্যন্ত আমাকে সমাধানের দিকে নিয়ে গেল +1। আমি একটি উত্তর যুক্ত করেছি যেখানে আমি এটির কাজ করার জন্য নেওয়া অতিরিক্ত পদক্ষেপগুলি অন্তর্ভুক্ত করেছি।
ডার্কসিগনাস

manage.py runserver --insecureআমার জন্য কাজ করেনি। যদিও এই এক।
জি

3
নোট করুন যে হোয়াইটনয়েস রিলিজ ৪.০ এর সাথে কনফিগারেশন পরিবর্তন হয়েছে। Wsgi.py. এ এই লাইনগুলি যুক্ত করবেন না। পরিবর্তে, কেবল 'whitenoise.middleware.WhiteNoiseMiddleware'মিডওয়্যারের সাথে যুক্ত করুন। চেঞ্জলগ থেকে প্রকাশের নোটগুলি দেখুন
ডগ হ্যারিস

কেন * সুপারিশ করা হয় না? আমি কয়েক বছরের জন্য এটি বেশ কয়েকটি সাইটে ব্যবহার করে আসছি, দুর্দান্ত কাজ করে। এমনকি হিরোকু এটি তাদের জাজানো টেমপ্লেটে ব্যবহার করে।
ওমর গঞ্জালেজ

31

Urls.py এ আমি এই লাইনটি যুক্ত করেছি:

from django.views.static import serve 

urlpatterns এ দুটি url যুক্ত করুন:

url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}), 
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}), 

এবং DEBUG = FALSE এ স্থির এবং মিডিয়া ফাইল উভয়ই অ্যাক্সেসযোগ্য ছিল।
আশা করি এটা সাহায্য করবে :)


এটি কবে অ্যাডমিন প্যানেল সিএসএস লোড হচ্ছে না ??
থিশিথা দীপাল

হ্যাঁ. একটাই যে কাজ করে !! ধন্যবাদ।
ডাঃ জেনারাল

অসাধারণ! STATIC_ROOT সেট করতে এবং ম্যানেজ.পাই সংগ্রহশক্তিটি ভুলে যাবেন না।
ডোমিংগোআর

2
আজকাল প্রতিস্থাপন url(সঙ্গেre_path(
Leopd

19

আপনি যদি বিকাশে স্থিতিশীল পরিবেশন দৃশ্য ব্যবহার করে থাকেন তবে আপনার কাছে DEBUG = সত্য থাকতে হবে:

সতর্কতা

এটি কেবল তখনই কাজ করবে যদি ডিইবিইউজি সত্য হয়।

কারণ এই দৃষ্টিভঙ্গি চূড়ান্তভাবে অক্ষম এবং সম্ভবত অনিরাপদ। এটি কেবল স্থানীয় বিকাশের জন্য এবং এটি উত্পাদনে কখনই ব্যবহার করা উচিত নয়।

ডক্স: বিকাশে স্থিতিশীল ফাইল পরিবেশন করা

সম্পাদনা: আপনি আপনার 404 এবং 500 টেমপ্লেট পরীক্ষা করতে কিছু url যুক্ত করতে পারেন, কেবল আপনার url এ জেনেরিক ভিউ ডিরেক্ট_ টু_প্লেট ব্যবহার করুন।

from django.views.generic.simple import direct_to_template

urlpatterns = patterns('',
    ('^404testing/$', direct_to_template, {'template': '404.html'})
)

1
কিভাবে এক, উত্পাদন উপর স্থির ফাইল পরিবেশন করা হয়? এনভিএম, আমি কেবল এটি দেখেছি। ধন্যবাদ।

আপনি একটি নির্দিষ্ট ডিরেক্টরি হোস্ট করতে আপনার ওয়েব সার্ভার সেট আপ করতে হবে। সর্বাধিক সাধারণত আপনি অ্যাপাচি বা এনগিনেক্স ব্যবহার করবেন। ডক্সটি এতে কিছুটা .ুকে পড়ে।
j_syk

ধন্যবাদ @ জ_সাইক, আমি ইতিমধ্যে 404 এইচটিএমএল এবং 500 এইচটিএমএল দেখার অনুরোধটি আপনার পরামর্শ অনুসারে অন্য কোনও ত্রুটি-বিহীন প্রক্রিয়াটির মাধ্যমে দেখেছি। তবে আমি জানতে চেয়েছিলাম যে আমার পৃষ্ঠাগুলি উত্পাদনের মতো সঠিকভাবে রেন্ডার করা পুরোপুরি অসম্ভব কিনা, যখন এখনও নিছক আমার পরীক্ষার সার্ভারে চলতে থাকে - ডাবগ বন্ধ হয়ে গেলে অ্যাপাচি-তে স্থির ফাইল হ্যান্ডলিংয়ের প্রতিনিধি দলটি আমার জন্য এটি নিষ্পত্তি করে। অবদান রাখার জন্য ধন্যবাদ।
nemesisfixx

@ এমকনেমেসিস আমি ঠিক ঠিক কী হবে তা নিশ্চিত নই - তবে TEMPLATE_DEBUG = মিথ্যা এবং DEBUG = সত্য সেট করার চেষ্টা করুন। আপনি যদি সুন্দর ত্রুটিগুলি বন্ধ করেন তবে আমি নিশ্চিত নই যে এটি 404/500 টেম্পলেটগুলির পরিবর্তে যায়
j_syk

যেমন প্রত্যাশিত, এটি করার ফলে কোনও ইতিবাচক ফল পাওয়া যায় নি still তবে ধন্যবাদ।
nemesisfixx

17

জনি এর উত্তর দুর্দান্ত, কিন্তু এখনও সেখানে বর্ণিত এই লাইন যোগ করে আমার পক্ষে কাজ করে নি। সেই উত্তরের উপর ভিত্তি করে, যে পদক্ষেপগুলি আমার পক্ষে আসলে কাজ করেছিল যেখানে:

  1. বর্ণিত হোয়াইটনয়েস ইনস্টল করুন :

    pip install WhiteNoise
  2. STATIC_ROOTভেরিয়েবলটি তৈরি করুন এবং আপনার MIDDLEWAREভেরিয়েবলটিতে হোয়াইটনয়েস যুক্ত করুন settings.py:

    #settings.py
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'whitenoise.middleware.WhiteNoiseMiddleware', #add whitenoise
        'django.contrib.sessions.middleware.SessionMiddleware',
        ...
    ]
    
    #...
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') ##specify static root
  3. তারপরে, জোনির wsgi.pyউত্তরে বর্ণিত হিসাবে আপনার ফাইলটি পরিবর্তন করুন :

    #wsgi.py
    from django.core.wsgi import get_wsgi_application
    from whitenoise.django import DjangoWhiteNoise
    
    application = get_wsgi_application()
    application = DjangoWhiteNoise(application)
  4. এর পরে, আপনার সার্ভারে আপনার পরিবর্তনগুলি স্থাপন করুন (গিট বা আপনি যা ব্যবহার করুন) দিয়ে।

  5. অবশেষে, আপনার সার্ভারে collectstaticআপনার বিকল্পটি চালান manage.py। এটি আপনার স্থিতিশীল ফোল্ডারগুলি থেকে সমস্ত ফাইলকে STATIC_ROOTআমরা পূর্বে উল্লেখ করা ডিরেক্টরিতে কপি করবে

    $ python manage.py collectstatic

    আপনি এখন একটি নতুন ফোল্ডার দেখবেন staticfilesযার মধ্যে এমন উপাদান রয়েছে।

এই পদক্ষেপগুলি অনুসরণ করার পরে আপনি এখন আপনার সার্ভারটি চালাতে পারবেন এবং উত্পাদন মোডে থাকাকালীন আপনার স্ট্যাটিক ফাইলগুলি দেখতে সক্ষম হবেন।

আপডেট: আপনার কাছে সংস্করণ <4 থাকলে চেঞ্জলগটি ইঙ্গিত করে যে এটি আর WSGI_APPLICATION = 'projectName.wsgi.application'আপনার settings.pyফাইলে ঘোষণা করার দরকার নেই ।


আমি সে অনুযায়ী এটি করেছি, এবং বিকাশের ক্ষেত্রে এটি দুর্দান্ত কাজ করেছে, তবে উত্পাদনে নয়। এখনও একই সমস্যা রয়েছে যখন DEBUG == মিথ্যা
আনা হুয়াং

@ অন্নাহুয়াং বিকাশ এবং উত্পাদনে আপনার অর্থ কী? আপনার কি আলাদা পরিবেশ বা মেশিন রয়েছে? তারা কি একইভাবে কনফিগার করা আছে?
ডার্কসিগনাস

13

আপনি নিরাপদে এবং ছাড়াই কোনও প্রোডাকশন জ্যাঙ্গো অ্যাপ্লিকেশনটিতে স্থির ফাইলগুলি পরিবেশন করতে পারেন DEBUG=True

বরং জ্যাঙ্গো নিজেই ব্যবহার করার পরিবর্তে, ব্যবহার dj_static আপনার WSGI ফাইল (মধ্যে GitHub ):

# requirements.txt:

...
dj-static==0.0.6


# YOURAPP/settings.py:

...
STATIC_ROOT = 'staticdir'
STATIC_URL = '/staticpath/'

# YOURAPP/wsgi.py:

...
from django.core.wsgi import get_wsgi_application
from dj_static import Cling

application = Cling(get_wsgi_application())

2
আমি তখন থেকেই হোয়াইটোনাইজ আবিষ্কার করেছি , যা আরও বেশি বৈশিষ্ট্যযুক্ত হতে পারে।
রবিন উইনস্লো

7

কেবল আপনার প্রকল্প url.py খুলুন, তারপরে যদি বিবৃতিটি সন্ধান করুন।

if settings.DEBUG:
    urlpatterns += patterns(
        'django.views.static',
        (r'^media/(?P<path>.*)','serve',{'document_root': settings.MEDIA_ROOT}), )

আপনি সেটিংস পরিবর্তন করতে পারেন DE সত্যের উপর DEBUG এবং এটি সর্বদা কাজ করবে। তবে যদি আপনার প্রকল্পটি গুরুতর কিছু হয় তবে আপনার উপরে উল্লিখিত অন্যান্য সমাধানগুলি সম্পর্কে চিন্তা করা উচিত।

if True:
    urlpatterns += patterns(
        'django.views.static',
        (r'^media/(?P<path>.*)','serve',{'document_root': settings.MEDIA_ROOT}), )

জ্যাঙ্গো ১.১০ তে আপনি লিখতে পারেন:

urlpatterns += [ url(r'^media/(?P<path>.*)$', serve, { 'document_root': settings.MEDIA_ROOT, }), url(r'^static/(?P<path>.*)$', serve, { 'document_root': settings.STATIC_ROOT }), ]

3
আপনার কোডটি সঠিক, তবে জ্যাঙ্গো ১.১০ তে কনফিগারেশনটি মিডিয়া এবং স্থির জন্য রয়েছে: urlpatterns + = [url (r '^ media / (? P <path>। *) $', পরিবেশন করুন, document 'ডকুমেন্ট_রোট': সেটিংস) .মিডিয়া_রোট,}), ইউআরএল (র '^ স্ট্যাটিক / (? পি <पथ>। *)
Serve

6

আপনি এটি বিভিন্ন উপায়ে ডিবাগ করতে পারেন। এই আমার পদ্ধতির।

localsettings.py:

DEBUG = False
DEBUG404 = True

urls.py:

from django.conf import settings
import os

if settings.DEBUG404:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve',
         {'document_root': os.path.join(os.path.dirname(__file__), 'static')} ),
    )

ডক্সটি অবশ্যই নিশ্চিত করুন;)

https://docs.djangoproject.com/en/2.0/howto/static-files/#limiting-use-to-debug-true


0

ইউআরএল () তে স্ট্রিং ভিউ আর্গুমেন্টের জন্য সমর্থন অবহেলিত এবং জাজানো ১.১০ এ সরানো হবে

আমার সমাধানটি উপরের কনরাডো সলিউশনে কেবলমাত্র সংশোধন।

from django.conf import settings
import os
from django.views.static import serve as staticserve

if settings.DEBUG404:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', staticserve,
            {'document_root': os.path.join(os.path.dirname(__file__), 'static')} ),
        )

0

যদিও এটি নিরাপদ নয় তবে আপনি সোর্স কোড পরিবর্তন করতে পারেন। নেভিগেট করুনPython/2.7/site-packages/django/conf/urls/static.py

তারপরে নীচের মত সম্পাদনা করুন:

if settings.DEBUG or (prefix and '://' in prefix):

সুতরাং যদি settings.debug==Falseএটি কোডের উপর প্রভাব ফেলবে না, তবে python manage.py runserver --runserverস্ট্যাটিক ফাইলগুলি চালানোর চেষ্টা করার পরেও ।

দ্রষ্টব্য : তথ্য কেবলমাত্র পরীক্ষার জন্য ব্যবহার করা উচিত


0

আমি আমার প্রকল্প / urls.py এ নিম্নলিখিত পরিবর্তনগুলি করেছি এবং এটি আমার জন্য কাজ করেছে

এই লাইনটি যুক্ত করুন: django.conf.urls থেকে url আমদানি করুন

এবং যুক্ত করুন: urlpterns এ url (r '^ মিডিয়া / (? পি। *) $', পরিবেশন করা, document 'ডকুমেন্ট_রোট': সেটিংস M মিডিয়া_রোট,})।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.