web-dev-qa-db-ja.com

Laravel 5.2はlaravel.logを開けませんでした

私はこのトピックに関して多くの質問があることを知っていますが、私の問題は本当に奇妙です。だから投稿することにしました。 /var/logs/Apache/error.logにこのエラーがあります

  [Tue Mar 01 07:26:51.435312 2016] [:error] [pid 8837] [client 127.0.0.1:37843] PHP Fatal error:  Uncaught exception 'UnexpectedValueException' with message 'The stream or file "/var/www/personale/librarie-cor/storage/logs/laravel.log" could not be opened: 
failed to open stream: Permission denied' in /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:87\nStack trace:
\n#0 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\\Handler\\StreamHandler->write(Array)
\n#1 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Logger.php(289): Monolog\\Handler\\AbstractProcessingHandler->handle(Array)
\n#2 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Logger.php(565): Monolog\\Logger->addRecord(400, Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
\n#3 /var/www/personale/librarie-cor/vendor/laravel/framework/src/Illuminate/Log/Writer.php(202): Monolog\\Logger->error(Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
\n#4 /var/www/personale/librarie-cor in /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 87

問題は、すでにchmod -R 777 storage/を実行したことです。スクリーンショットは次のとおりです。

chmoded

エラーを取り除くにはどうすればよいですか?

12
csanonymus

最終的に解決策を見つけました。PSR-4とクラスの自動インポートに問題があったようです。

だから、この問題を抱えている他の人のためのソリューションがあります:

php artisan clear-compiled 
composer dump-autoload
php artisan optimize
php artisan cache:clear
2
csanonymus

TLDR;

端末で次のコマンドを実行します

# Clear Laravel cache and the compiled classes
php artisan cache:clear
php artisan clear-compiled

# Change the storage and cache directories permission
Sudo chmod -R 777 storage
Sudo chmod -R 777 bootstrap/cache

# Regenerate the composer autoload file
composer dump-autoload

詳細な説明

これは通常、Webサーバーがstorageおよびbootstrap/cacheディレクトリへの書き込みアクセスを必要とするために発生します。

1. Webサーバープロセスで使用されているユーザーを確認する

まず、ウェブサーバープロセスが、制限された権限を持つアカウントで実行されていることを確認してください。 NginxとApacheは通常、権限の少ないwww-dataユーザーとグループを自動的に作成して使用します。いつでもpsコマンドを使用して、実行中のサービスで使用されているユーザーを確認できます。

ps aux | grep nginx

2.プロジェクトディレクトリの所有者を設定する

次に、Laravelプロジェクトディレクトリが、Webサーバープロセスを実行する同じユーザーとグループによって所有されていることを確認します。Webサーバーがwww-dataによって実行され、プロジェクトディレクトリが/var/www/laravelにあり、次のように所有権を設定できます。

Sudo chown -R www-data:www-data /var/www/laravel

3. storageおよびcacheディレクトリへの書き込みアクセス権を付与します

これは重要なステップです。必ずstoragebootstrap/cacheディレクトリの両方に書き込み許可を与えてください。

Sudo chmod -R 775 /var/www/laravel/storage
Sudo chmod -R 775 /var/www/laravel/bootstrap/cache

まだ動かない?

上記の手順がまだ機能しない場合は、シェルで次のコマンドを実行してみてください。

# 1. Clear Laravel cache
php artisan cache:clear

# 2. Delete the compiled class
php artisan clear-compiled

# 3. Regenerate the composer autoload file
composer dump-autoload

それでも、まだ機能していませんか?

最後のリソースについては、777にアクセス許可を設定してみてください。これは、すべてのユーザーが特定のディレクトリに対して読み取りおよび書き込みを行えることを意味します。

Sudo chmod -R 777 /var/www/laravel/storage
Sudo chmod -R 777 /var/www/laravel/bootstrap/cache

この助けを願っています。

44

Centos7でも同じ問題が発生しました...すべてを試しました。最後に、stackoverflowでselinuxの可能性を示唆する投稿を見つけました。私はselinuxを無効にしましたが、うまくいきました!

11
jacobfogg

Centosを使用している場合は、SELinux施行を無効にします

これを行うには、以下のコマンドを実行します。

setenforce 0

私の場合、このソリューションは非常にうまく機能しました。これが役立つことを願っています。

Uは次のようなものを試してください-

php artisan cache:clear
php artisan clear-compiled

Sudo chmod -R 777 storage/ -R
composer dump-autoload

Uは、この質問にアクセスして詳細を確認できます。

5
Abrar Jahin

これを使って

chcon -R -t httpd_sys_rw_content_tストレージ

2
karrar kazuya