İstisna işleyicide hata. - Laravel


118

Laravel ile ilgili bir soru. Herkese açık bir Unix sunucu kurulumum var:

<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>

Belgeleri / var / www / alanim dışında, yani http://mydomain.org/test.php ile test.php ile şunları içeren iyi bir şekilde sunabilirim :

<?php echo 'test';

iyi çalışıyor.

Bash'de, Laravel Composer aracılığıyla kurulup dosyalara bakarak:

# 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

Yani göz attığımda:

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

neden başvurum rapor ediyor:

Error in exception handler. 

tarayıcıda - boş bir beyaz ekranda? Laravel açılış ekranını görmeyi bekliyorum.

Dahası, günlük dosyaları da hiçbir şey göstermez.


PHP sürümü? Sunucularınızın girişlerini kontrol edebilir /var/logve bir şey olursa söyleyeceklerini görebilir misiniz?
Jason Lewis

3
Laravel'in hata kayıtları ne olacak app/storage/logs? Ve tüm depolama dizinleri yazılabilir mi?
Jason Lewis

1
@Jason Dediğin gibi - depolama dizinleriydi. Depoda bir chmod -R 757 ve açılış ekranına vurabilirim. +1 ve teşekkürler.
çerez

Yanıtlar:


246

Daha güvenli seçenek, depolama dizinleri grubunu web sunucuları grubunuza değiştirmek (genellikle apacheveya www-data, ancak bu farklı işletim sistemleri arasında değişebilir) ve dizinden itibaren izinleri saklamaktır 775.

chgrp -R www-data app/storage

Veya ile chown.

chown -R :www-data app/storage

Ardından, dizin izinlerinin olduğundan emin olun 775.

chmod -R 775 app/storage

Gönderen laravel web sitesinde :

Laravel yapılandırılması için bir dizi izin gerektirebilir: uygulama / depolama içindeki klasörler web sunucusu tarafından yazma erişimini gerektirir.


14
genellikle grup sahibini web sunucusuna değiştirmek daha güvenlidir ve dosyalarınıza "dünyaya" tam erişim hakkı vermez. 775, dizinler için varsayılandır, bu yüzden yeterli olmalıdır. chgrp -R apache uygulaması / depolama
hlev

5
Mac'te yukarıdaki komutlar çalışmadı. Ancak, bu komut şunu yaptı: sudo chown -R _www app/storage(gerekirse _www'yi Apache sunucu adınızla değiştirin)
Leo Galleguillos

4
Ve sonra gruba yazma izni vermek zorunda kaldım :chmod -R g+w app/storage
Daniel AA Pelsmaeker

Teşekkürler, bunu faydalı buldum. Ancak, daha sonra 'php artisan migrate ...' komutunu çalıştırmaya çalıştığınızda sorun yaratır - çünkü '/ app / storage /' klasörü size 'İzin Reddedildi' hatası verir - ve sahibine tüm izinleri düzeltmeye devam edersiniz '/bootstrap/compiled.php' izin hatasına gelene kadar 'www-data'. Bunu da 'www-data' sahibi olarak ayarlamak veya tümünü 0777 olarak ayarlamak iyi bir fikir mi?
peedeeaay

3
(y), değişikliği takdir edin! chmod 777 pek çok çocuğu çocukluğunu mahvetti :)
MA Hossain Tonu

17

Laravel 5.2

chmod -R 777 depolama

Daha eski Laravel chmod 777 uygulaması / depolama / *

Kendi hesabınız dışında hiçbir kullanıcı hesabı olmayan, makul bir şekilde kilitlenmiş özel bir sunucunuz varsa, 777 başka hiçbir şeyden daha fazla güvenlik riski oluşturmamalıdır. Kötü niyetli bir kullanıcının bundan yararlanabilmesi için başka bir güvenlik açığı olması gerekir ve bu noktada, 777 izni muhtemelen yine de tartışmalıdır. Bununla birlikte, güvenmediğiniz diğer kullanıcılarla paylaşılan bir sunucu üzerindeyseniz, daha karmaşık izinlere bakmanız veya barındırma sağlayıcınızın zaten izolasyon sağlayıp sağlamadığını kontrol etmeniz gerekir.

Bunu gerçekten hızlı başlangıç ​​belgelerine koymalı ve çeşitli kurulumlar için örnekler sağlamalıdırlar. Daha fazla dizin otomatik olarak oluşturulduğundan, ilk yüklemeden sonra tekrar çalıştırmanız gerekebilir. Yazma hataları için günlüklerinize bakın.

Ayrıca DocumentRoot'unuz / path / to / laravel-project / public olmalıdır


4
Kabul edildi, ya da daha iyisi daha ayrıntılı bir hata mesajı
homerjam

3
Onlar gerektiğini değil bir laravel uygulamayı çalıştırmak için doğru yol değildir, çünkü www.domain.com/project/public gitmek için söyleyecektir. Tüm uygulama için tek giriş noktası public / index.php olacak şekilde web sunucunuzu public / * ve daha fazlasını sunacak şekilde ayarlamalısınız. Apache ile bunu çok kolay bir şekilde yapabilirsiniz; nginx kullanıyorsanız, muhtemelen ne yaptığınızı biliyorsunuzdur. Ve ucuz bir cPanel sunucusu kullanıyorsanız (taziyelerim), web kökünü halka işaret edecek şekilde ayarlamak da kolaydır.
borfast

11
cidden 777'nin güvenlik ilkelerinin en açık ihlali olduğunu öne sürüyor ...
ftrotter

1
Bir yaşında olduğunu biliyorum ama 777 bunu yapmanın en kötü yolu, @ftrotter'ın dediği gibi tüm güvenlik kurallarını çiğniyor.
Zac Grierson

2

app/storage/sessionsKlasördeki eski oturumları sildim ve bundan sonra yangın gibi çalışmasına 775izin verdim app/storage!

chmod -R 775 app/storage

İyi şanslar!


1

Büyük çoğunluk bunu uzun zaman önce geçti, ancak yine de "İstisna işleyicide hata" ile ilgili başka bir tavsiyem var.

Bu, çevrenizin genel olarak çalışıp çalışmadığını değerlendirmenin iyi bir yolu olan "php artisan" ı çalıştırdığımda başıma geldi.

Çalıştırdım ve bana bu hatayı verdi ve projemin kök dizinindeki zanaatkar dosyasını düzenleyip bir try catch deyimi ekleyene kadar sorunu tam olarak belirleyemedim:

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

Bu noktada nihayet aydınlatıcı bir mesaj gördüm:

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

Bu benim durumumda kötü bir redis konfigürasyonuydu, ancak sizin durumunuzda herhangi bir şey olabilir.

Umarım bu birisine yardımcı olur, ya da en azından bir dahaki sefere buraya geldiğimde kendi cevabımı bulacağım.


Teşekkürler. Bunu kullanarak sorunumu buldum - Basılı could not find driver. Ve sonra ben yüklü öğrendim php-mysqlederken, php7.0-mysqlgerekti. Bu bağlantı bana da yardımcı oldu - digitalocean.com/community/tutorials/…
Udayraj Deshmukh

0

Bunu çözmenin en kısa yolu zanaatkârlığa sudo ile başlamaktır. Bu, zanaatkara ihtiyaç duyduğu tüm izinleri verecek ve herhangi bir güvenlik sorunu da yaratmayacaktır.

bunun yerine zanaatkar hizmete başlamak yerine:

$ php artisan serve

kullanmayı deneyin:

$ sudo php artisan serve 

bu nedenle herhangi bir izin değişikliği yapmanız gerekmeyecek


-5

Aynı sorunu yaşıyorum, sadece chmod komut satırı ile dizin uygulaması / depolamadan 775'e izin veriyorum


5
Bu, halihazırda kabul edilen cevapta zaten belirtilmiştir (ve dizinin grubunu tam olarak doğru bir cevap olacak şekilde ayarlamayla ilgili bu yanıttaki bilgilere ihtiyaç duyacaktır.)
Matt Gibson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.