Rejoice Software logo

Laravel · · 4 मिनट का लेख

Laravel में 500 एरर ठीक करना — एक आज़माई हुई चेकलिस्ट

स्टोरेज परमिशन से लेकर क्यू वर्कर तक, Laravel ऐप बंद होने पर हम ठीक इसी क्रम में जाँच करते हैं।

लॉग से शुरू करें

“500 Server Error” पेज सिर्फ़ बताता है कि कुछ फ़ेल हुआ। वजह लॉग में है। पहले storage/logs/laravel.log देखें (या डेली लॉग इस्तेमाल करते हैं तो उस दिन की फ़ाइल)। अगर वह ख़ाली है, तो एरर Laravel के लॉग करने से पहले हुआ, इसलिए वेब सर्वर का एरर लॉग और PHP-FPM या LiteSpeed का एरर लॉग देखें।

एरर देखने के लिए लाइव साइट पर APP_DEBUG=true न करें। इससे पेज खोलने वाले किसी भी व्यक्ति को स्टैक ट्रेस, एनवायरनमेंट मान और कभी-कभी पासवर्ड दिख जाते हैं। इसके बजाय लॉग पढ़ें।

tail -n 100 storage/logs/laravel.log
# no entries? check the server logs, for example:
tail -n 100 /var/log/nginx/error.log

1. परमिशन

Laravel को storage और bootstrap/cache में लिखने की अनुमति चाहिए। FTP अपलोड या किसी दूसरे यूज़र से डिप्लॉय के बाद ये फ़ोल्डर अक्सर गलत अकाउंट के हो जाते हैं। लॉग में “Permission denied” या “failed to open stream” दिखेगा। वेब सर्वर यूज़र को सिर्फ़ इन दो फ़ोल्डरों में लिखने की अनुमति दें — पूरा प्रोजेक्ट कभी writable न करें।

2. एनवायरनमेंट और कॉन्फ़िग कैश

.env का गायब या गलत मान एक आम वजह है: APP_KEY नहीं (“No application encryption key has been specified”), गलत डेटाबेस पासवर्ड, या ऐसा कैश ड्राइवर जो सर्वर पर है ही नहीं। याद रखें, php artisan config:cache के बाद Laravel रनटाइम पर .env नहीं पढ़ता, और कॉन्फ़िग फ़ाइलों के बाहर कोई भी env() कॉल null लौटाती है। .env बदलें, फिर कैश दोबारा बनाएँ।

3. डिपेंडेंसी और ऑटोलोडिंग

डिप्लॉय के ठीक बाद “Class not found” का मतलब आमतौर पर है कि vendor अपडेट नहीं हुआ या ऑटोलोडर पुराना है। सर्वर पर --no-dev और --optimize-autoloader के साथ composer install चलाएँ, और पक्का करें कि सर्वर का PHP वर्ज़न और एक्सटेंशन composer.lock की ज़रूरत से मेल खाते हैं।

4. डेटाबेस और माइग्रेशन

ऐसा नया कोड जो ऐसे कॉलम की उम्मीद करता है जो डेटाबेस में अभी नहीं है, “Unknown column” या “Base table or view not found” जैसे SQL एरर देता है। प्रोडक्शन में बाकी माइग्रेशन --force के साथ चलाएँ। यह भी जाँचें कि डेटाबेस और Redis पहुँच में हैं और उनके कनेक्शन ख़त्म नहीं हुए।

5. पुराने कैश और क्यू वर्कर

पिछली रिलीज़ के कैश किए गए रूट, व्यू और कॉन्फ़िग ऐसे कोड की ओर इशारा कर सकते हैं जो अब नहीं है। हर डिप्लॉय में उन्हें साफ़ करके दोबारा बनाएँ। क्यू वर्कर लंबे समय तक चलने वाली प्रोसेस हैं: रीस्टार्ट होने तक वे पुराना कोड मेमोरी में रखते हैं, इसलिए जॉब ऐसे एरर से फ़ेल हो सकते हैं जो अब आपके कोड से मेल नहीं खाते।

composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan optimize:clear
php artisan config:cache && php artisan route:cache && php artisan view:cache
php artisan queue:restart

6. मेमोरी, टाइमआउट और बाहरी सेवाएँ

बड़े एक्सपोर्ट, इमेज प्रोसेसिंग या बिना सीमा की क्वेरी PHP की memory_limit या max_execution_time पार कर सकती हैं। भारी काम क्यू जॉब में भेजें और डेटा को हिस्सों में प्रोसेस करें। बाहरी API कॉल में हमेशा टाइमआउट और फ़ॉलबैक होना चाहिए, ताकि एक धीमा प्रोवाइडर आपके पेज न गिराए। कोड का फ़र्क ध्यान रखें: 502 या 504 आमतौर पर PHP-FPM या प्रॉक्सी टाइमआउट की ओर इशारा करता है, ऐप्लिकेशन एक्सेप्शन की ओर नहीं।

अगली बार से बचें

  • एक ही डिप्लॉय स्क्रिप्ट इस्तेमाल करें जो हमेशा एक जैसे कदम एक ही क्रम में चलाए।
  • एरर ट्रैकिंग (जैसे Sentry या Flare) जोड़ें ताकि ग्राहकों से पहले आपको पता चले।
  • Laravel में शामिल /up हेल्थ रूट और डेटाबेस छूने वाले एक पेज की मॉनिटरिंग करें।
  • स्टेजिंग को प्रोडक्शन के जितना हो सके पास रखें: वही PHP वर्ज़न, एक्सटेंशन और कैश ड्राइवर।

क्या आप चाहते हैं कि हम आपकी साइट देखें?

तुरंत रिपोर्ट के लिए मुफ़्त वेबसाइट चेकर चलाएँ, या टिकट बनाएँ और एक इंजीनियर एक कार्यदिवस में जवाब देगा।

#Laravel #Debugging #DevOps

बात करें

कुछ यादगार बनाते हैं.

फ़्री 30-मिनट स्ट्रैटेजी कॉल. कोई पिच नहीं, कोई बाध्यता नहीं — सिर्फ एक योजना.

प्रोजेक्ट शुरू करें