अपवाद हैंडलर में त्रुटि। - लारवेल


118

यह एक Laravel- स्थापित संबंधित प्रश्न है। मेरे पास एक सार्वजनिक-सामना करने वाला यूनिक्स सर्वर सेटअप है:

<VirtualHost *:80>
ServerAdmin webmaster@mydomain.org
DocumentRoot "/var/www/mydomain"
ServerName mydomain.org
ServerAlias www.mydomain.org
ErrorLog "/var/log/mydomain.org-error_log"
CustomLog "/var/log/mydomain.org-access_log" common
</VirtualHost>

मैं / var / www / mydomain यानी http://mydomain.org/test.php के साथ test.php युक्त ठीक दस्तावेजों की सेवा कर सकता हूं :

<?php echo 'test';

ठीक काम करता है।

बैश में, लारवेल ने संगीतकार के माध्यम से स्थापित किया और फाइलों को देखा:

# ls /var/www/mydomain/my-laravel-project

.gitattributes  CONTRIBUTING.md artisan         composer.json   phpunit.xml readme.md       vendor
.gitignore      app             bootstrap       composer.lock   public          server.php

इसलिए जब मैं ब्राउज़ करता हूं:

http://mydomain.org/my-laravel-project/public/

मेरे आवेदन की रिपोर्ट क्यों है:

Error in exception handler. 

ब्राउज़र में - एक रिक्त सफेद स्क्रीन पर? मुझे लार्वा स्प्लैश स्क्रीन देखने की उम्मीद है।

इसके अलावा, लॉग फ़ाइलें कुछ भी प्रकट नहीं करती हैं।


PHP संस्करण? क्या आप अपने सर्वर लॉग की जांच कर सकते हैं /var/logऔर देख सकते हैं कि क्या, अगर कुछ भी, उन्हें कहना है।
जेसन लुईस

3
लारवेल की त्रुटि के बारे में क्या कहता है app/storage/logs? और क्या सभी संग्रहण निर्देशिकाएं लेखन योग्य हैं?
जेसन लुईस

1
@ जैसन जैसा आपने कहा - यह स्टोरेज डायरेक्टरी थी। भंडारण पर एक chmod -R 757 और मैं छप स्क्रीन हिट कर सकते हैं। +1 और धन्यवाद।
कुकी

जवाबों:


246

सुरक्षित विकल्प अपने वेब सर्वर समूह (आमतौर पर apacheया www-data, लेकिन यह अलग-अलग ऑपरेटिंग सिस्टम के बीच भिन्न हो सकते हैं) के लिए भंडारण निर्देशिकाओं के समूह को बदलने के लिए होगा और अनुमतियों को निर्देशिका के रूप में रख सकते हैं 775

chgrp -R www-data app/storage

या के साथ chown

chown -R :www-data app/storage

फिर सुनिश्चित करें कि निर्देशिका अनुमतियाँ हैं 775

chmod -R 775 app/storage

से Laravel वेब साइट :

लारवेल को कॉन्फ़िगर करने के लिए अनुमतियों के एक सेट की आवश्यकता हो सकती है: ऐप / स्टोरेज के भीतर फ़ोल्डर्स को वेब सर्वर द्वारा लिखने की पहुंच की आवश्यकता होती है।


14
आम तौर पर समूह के मालिक को वेब सर्वर में बदलने के लिए सुरक्षित है और आपकी फ़ाइलों तक "दुनिया" को पूर्ण पहुंच प्रदान नहीं करता है। 775 निर्देशिकाओं के लिए डिफ़ॉल्ट है, इसलिए यह पर्याप्त होना चाहिए। chgrp आर अपाचे एप्लिकेशन / भंडारण
hlev

5
मैक पर, उपरोक्त कमांड काम नहीं करते थे। हालाँकि, इस कमांड ने किया: sudo chown -R _www app/storage(यदि आवश्यक हो तो अपने अपाचे सर्वर नाम के साथ _www)
लियो गैलीलगिलोस

4
और फिर मुझे समूह को लिखने की अनुमति देनी थी :chmod -R g+w app/storage
डैनियल एए पल्सेमेकर

धन्यवाद, मुझे यह मददगार लगा। लेकिन, यह बाद में समस्याएँ पैदा करता है जब आप 'php कारीगर माइग्रेट ...' चलाने की कोशिश कर रहे होते हैं - '/' app / storage / 'फोल्डर के रूप में आपको' अनुमति अस्वीकृत 'त्रुटि देता है - और आप स्वामी को सभी अनुमतियाँ ठीक करने के लिए जाते हैं 'www-data', जब तक कि आप '/bootstrap/compiled.php' परमिशन एरर प्राप्त नहीं कर लेते। क्या यह एक अच्छा विचार है कि साथ ही, 'www-data' के मालिक को, या सभी को 0777 पर सेट करें?
17

3
(y), परिवर्तन की सराहना करें! chmod 777 ने इतने सारे बच्चों का बचपन बर्बाद कर दिया :)
MA हुसैन टोनू

17

लारवेल 5.2

chmod -R 777 स्टोरेज

पुराने लारवेल chmod 777 ऐप / स्टोरेज / *

ध्यान दें कि यदि आपके पास अपने स्वयं के अलावा किसी अन्य उपयोगकर्ता खाते के साथ एक समर्पित सर्वर बंद है, तो 777 को किसी भी अन्य चीज़ की तुलना में अधिक सुरक्षा जोखिम नहीं उठाना चाहिए। दुर्भावनापूर्ण उपयोगकर्ता के लिए इसका लाभ उठाने के लिए कुछ अन्य भेद्यता होनी चाहिए, और उस बिंदु पर, 777 अनुमति शायद वैसे भी मूट है। यदि आप अन्य उपयोगकर्ताओं के साथ साझा किए गए सर्वर पर हैं, तो आप भरोसा नहीं करते हैं, तो आपको और अधिक जटिल अनुमतियों पर गौर करना होगा या जांचना होगा कि क्या आपके होस्टिंग प्रदाता ने पहले ही अलगाव प्रदान कर दिया है।

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

साथ ही आपका डॉक्यूमेंटरूट / पथ / / से / लार्वा-प्रोजेक्ट / सार्वजनिक होना चाहिए


4
सहमत, या बेहतर अभी भी एक अधिक
क्रिया

3
उन्हें आपको www.domain.com/project/public पर जाने के लिए नहीं कहना चाहिए क्योंकि लारवेल एप्लिकेशन को चलाने का यह सही तरीका नहीं है। आपको अपना वेब सर्वर जनता / * की सेवा के लिए सेट करना चाहिए और अधिक नहीं, सार्वजनिक / index.php पूरे आवेदन के लिए केवल प्रवेश बिंदु होना चाहिए। आप अपाचे के साथ बहुत आसानी से कर सकते हैं; यदि आप nginx का उपयोग कर रहे हैं तो आप शायद जानते हैं कि आप क्या कर रहे हैं। और यदि आप एक सस्ते cPanel होस्ट (मेरी संवेदना) का उपयोग कर रहे हैं, तो जनता को इंगित करने के लिए वेब रूट सेट करना भी आसान है।
borfast

11
गंभीरता से सुझाव देते हुए 777 सिर्फ सुरक्षा सिद्धांतों का स्पष्ट उल्लंघन है ...
फुटरटर

1
मुझे पता है कि यह एक साल पुराना है, लेकिन 777 ऐसा करने का सबसे खराब तरीका है, यह सुरक्षा के सभी नियमों को तोड़ता है जैसे @ftrotter ने कहा।
ज़ैक ग्रियर्सन

2

मैंने app/storage/sessionsफ़ोल्डर के अंदर पुराने सत्रों को हटा दिया और इसके बाद एक 775अनुमति दी app/storageकि यह आग की तरह काम कर रहा है!

chmod -R 775 app/storage

सौभाग्य!


1

बैंडबाजा इस पर बहुत पहले पारित हो चुका है, लेकिन अभी भी मेरे पास "अपवाद हैंडलर में त्रुटि" के बारे में एक और सलाह है।

मेरे साथ ऐसा तब हुआ जब मैंने "php कारीगर" को चलाया, जो यह आकलन करने का एक अच्छा तरीका है कि क्या आपका वातावरण सामान्य रूप से काम कर रहा है।

मैंने इसे चलाया और इसने मुझे वह त्रुटि दी, और जब तक मैंने अपने प्रोजेक्ट की रूट डायरेक्टरी में कारीगर फ़ाइल को एडिट नहीं किया और ट्राइ कैच स्टेटमेंट नहीं जोड़ा, तब तक मैं इस समस्या को इंगित नहीं कर सका:

try {
    $artisan = Illuminate\Console\Application::start($app);
}
catch (Exception $e)
{
    dd($e->getMessage());
}

किस बिंदु पर मैंने अंत में एक ज्ञानवर्धक संदेश देखा:

string(41) "Connection refused [tcp://127.0.0.1:6379]"

जो मेरे मामले में एक खराब रेडिस कॉन्फ़िगरेशन था, लेकिन आपके मामले में कुछ भी हो सकता है।

मुझे उम्मीद है कि इससे किसी को मदद मिलेगी, या कम से कम अगली बार जब मैं यहां पहुंचूंगा तो मुझे अपना जवाब मिल जाएगा।


धन्यवाद। मुझे इसका उपयोग करते हुए अपने मुद्दे का पता चला - यह मुद्रित हुआ could not find driver। और फिर मुझे पता चला कि मैंने स्थापित किया था php-mysql, जबकि php7.0-mysqlआवश्यक था। इस लिंक ने मुझे मदद भी की - digitalocean.com/community/tutorials/…
उदयराज देशमुख

0

इसे हल करने का सबसे छोटा तरीका सूडान के साथ कारीगर शुरू कर रहा है। इससे कारीगर को वह सभी अनुमतियां मिलेंगी जिनकी उसे जरूरत है और साथ ही कोई सुरक्षा परेशानी भी नहीं होगी।

इसलिए इसके बजाय कारीगर की सेवा शुरू करें:

$ php artisan serve

प्रयोग करके देखें:

$ sudo php artisan serve 

इस प्रकार आपको कोई अनुमति परिवर्तन नहीं करना है


-5

मेरे पास एक ही मुद्दा है, मैं सिर्फ डायरेक्टरी ऐप / स्टोरेज से 775 के लिए chmod कमांड लाइन से अनुमति बदलता हूं


5
वर्तमान में स्वीकार किए गए उत्तर में यह पहले से ही बताया गया है (और पूरी तरह से सही उत्तर होने के लिए निर्देशिका के समूह को सही ढंग से सेट करने के बारे में उस उत्तर से जानकारी की आवश्यकता होगी।)
मैट गिब्सन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.