Kesalahan dalam penangan pengecualian. - Laravel

118

Ini pertanyaan terkait pemasangan Laravel. Saya memiliki pengaturan server Unix yang bersifat publik:

<VirtualHost *:80>
ServerAdmin [email protected]
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>

Saya dapat menyajikan dokumen dengan baik di luar / var / www / mydomain yaitu http://mydomain.org/test.php dengan test.php berisi:

<?php echo 'test';

bekerja dengan baik.

Di bash, dengan Laravel diinstal melalui Composer dan melihat file:

# 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

Jadi ketika saya menjelajah ke:

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

mengapa aplikasi saya melaporkan:

Error in exception handler. 

di browser - di layar putih kosong? Saya mengharapkan untuk melihat layar splash Laravel.

Selain itu, file log juga tidak mengungkapkan apa pun.

Kue kering
sumber
Versi PHP? Dapatkah Anda memeriksa log in server Anda /var/logdan melihat apa, jika ada, yang mereka katakan.
Jason Lewis
3
Bagaimana dengan kesalahan log in Laravel app/storage/logs? Dan apakah semua direktori penyimpanan dapat ditulisi?
Jason Lewis
1
@Jason Seperti yang Anda katakan - itu adalah direktori penyimpanan. Sebuah chmod -R 757 pada penyimpanan dan saya dapat menekan layar splash. +1 dan terima kasih.
kue

Jawaban:

246

Opsi yang lebih aman adalah mengubah grup direktori penyimpanan ke grup server web Anda (biasanya apacheatau www-data, tetapi ini dapat berbeda-beda di antara sistem operasi yang berbeda) dan mempertahankan izin pada direktori sebagai 775.

chgrp -R www-data app/storage

Atau dengan chown.

chown -R :www-data app/storage

Kemudian pastikan izin direktori 775.

chmod -R 775 app/storage

Dari situs web Laravel :

Laravel mungkin memerlukan satu set izin untuk dikonfigurasi: folder dalam aplikasi / penyimpanan memerlukan akses tulis oleh server web.

Jason Lewis
sumber
14
biasanya lebih aman untuk mengubah pemilik grup ke server web dan tidak memberikan "dunia" akses penuh ke file Anda. 775 adalah default untuk direktori, jadi itu sudah cukup. chgrp -R apache app / storage
hlev
5
Di Mac, perintah di atas tidak berfungsi. Namun, perintah ini memang: sudo chown -R _www app/storage(ganti _www dengan nama server Apache Anda jika perlu)
Leo Galleguillos
4
Dan kemudian saya harus memberikan izin menulis kepada grup :chmod -R g+w app/storage
Daniel AA Pelsmaeker
Terima kasih, saya merasa ini berguna. Tapi, itu kemudian menimbulkan masalah ketika Anda mencoba menjalankan 'php artisan migrate ...' - karena folder '/ app / storage /' memberi Anda kesalahan 'Permission Denied' - dan Anda terus memperbaiki semua izin untuk pemilik 'www-data', hingga Anda mendapatkan kesalahan izin '/bootstrap/compiled.php'. Apakah merupakan ide yang baik untuk mengaturnya juga, ke pemilik 'www-data', atau mengatur semuanya ke 0777?
peedeeaay
3
(y), hargai perubahannya! chmod 777 menghancurkan begitu banyak anak kecil :)
MA Hossain Tonu
17

Laravel 5.2.0

chmod -R 777 penyimpanan

Aplikasi / penyimpanan / * Laravel chmod 777 yang lebih lama

Perhatikan jika Anda memiliki dedicated server yang cukup terkunci tanpa akun pengguna selain milik Anda, 777 seharusnya tidak menimbulkan risiko keamanan lebih dari apa pun. Harus ada beberapa kerentanan lain bagi pengguna jahat untuk memanfaatkannya, dan pada saat itu, izin 777 mungkin masih diperdebatkan. Namun, jika Anda berada di server bersama dengan pengguna lain yang tidak Anda percayai, Anda harus melihat izin yang lebih rumit atau memeriksa apakah penyedia hosting Anda telah menyediakan isolasi.

Mereka harus benar-benar meletakkan ini di dokumen mulai cepat dan memberikan contoh untuk berbagai pengaturan. Anda mungkin juga harus menjalankannya lagi setelah pemuatan pertama karena lebih banyak direktori dibuat secara otomatis. Cari di log Anda untuk kesalahan tulis.

DocumentRoot Anda juga harus / path / to / laravel-project / public

malhal
sumber
4
Setuju, atau lebih baik lagi pesan kesalahan yang lebih bertele-tele
homerjam
3
Mereka tidak boleh meminta Anda untuk pergi ke www.domain.com/project/public karena itu bukan cara yang benar untuk menjalankan aplikasi Laravel. Anda harus mengatur server web Anda untuk melayani publik / * dan tidak lebih, dengan public / index.php menjadi satu-satunya titik masuk untuk keseluruhan aplikasi. Anda dapat melakukannya dengan sangat mudah dengan Apache; jika Anda menggunakan nginx maka Anda mungkin tahu apa yang Anda lakukan. Dan jika Anda menggunakan host cPanel murah (belasungkawa), juga mudah untuk menyiapkan root web agar mengarah ke publik.
borfast
11
secara serius menyarankan 777 hanyalah pelanggaran paling jelas dari prinsip-prinsip keamanan ...
ftrotter
1
Saya tahu ini berumur satu tahun tetapi 777 adalah cara terburuk untuk melakukan ini melanggar semua aturan keamanan seperti yang dikatakan @ftrotter.
Zac Grierson
2

Saya menghapus sesi lama di dalam app/storage/sessionsfolder dan memberikan 775izin app/storagesetelah itu berfungsi seperti api!

chmod -R 775 app/storage

Semoga berhasil!

Abdulaziz Noor
sumber
1

Kereta musik telah meneruskan ini sejak lama, tetapi saya masih memiliki nasihat lain tentang "Kesalahan dalam penangan pengecualian."

Saya mengalami hal ini ketika menjalankan "php artisan", yang merupakan cara yang baik untuk menilai apakah lingkungan Anda berfungsi secara umum.

Saya menjalankannya dan itu memberi saya kesalahan itu, dan saya tidak bisa menunjukkan masalahnya sampai saya mengedit file artisan di direktori root proyek saya dan menambahkan pernyataan coba tangkap:

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

Pada titik mana saya akhirnya melihat pesan yang mencerahkan:

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

yang dalam kasus saya adalah konfigurasi redis yang buruk, tetapi dalam kasus Anda dapat berupa apa saja.

Saya harap ini membantu seseorang, atau setidaknya lain kali saya sampai di sini, saya akan menemukan jawaban saya sendiri.

NiRR
sumber
Terima kasih. Saya menemukan masalah saya menggunakan ini - Ini dicetak could not find driver. Dan kemudian saya menemukan saya telah menginstal php-mysql, sementara php7.0-mysqldiperlukan. Tautan ini juga membantu saya - digitalocean.com/community/tutorials/…
Udayraj Deshmukh
0

Cara terpendek untuk mengatasinya adalah memulai tukang dengan sudo. Ini akan memberi pengrajin semua izin yang dibutuhkan dan tidak akan membuat masalah keamanan juga.

jadi alih-alih memulai pengrajin melayani dengan:

$ php artisan serve

coba gunakan:

$ sudo php artisan serve 

jadi Anda tidak perlu melakukan perubahan izin apa pun

Skeletor
sumber
-5

Saya memiliki masalah yang sama, saya hanya mengubah izin dari aplikasi / penyimpanan direktori ke 775 dengan baris perintah chmod

Caio Cutrim
sumber
5
Ini sudah ditunjukkan dalam jawaban yang diterima saat ini (dan akan membutuhkan informasi dari jawaban itu tentang mengatur grup direktori dengan benar menjadi jawaban yang sepenuhnya benar.)
Matt Gibson