我的Ubuntu 14.04和Laravel 5.1应用程序出现问题。
当我的应用想要记录时,我收到此错误:
未捕获UnexpectedValueException:无法打开流或文件storage / logs / l:无法打开流:/ var / www / releases / 20160426 / booking_server / vendor / monolog / monolog / src / Monolog / Handler中的权限被拒绝/StreamHandler.php:87\nStack trace:\ n#0 ........它继续
我找到了这个解决方案:
sudo php artisan cache:clear
sudo chmod -R 777 storage
sudo composer dump-autoload
但问题是它只是暂时的。这个问题每天都会发生,我总是要做同样的事情。
我可以做些什么来阻止每天发生这种情况?
PD:我有一个日常日志,但如果可能的话我想保持这种方式。答案 0 :(得分:5)
不建议在服务器上创建一个全局可写的目录(chmod 777)。 像这样设置权限(假设网络服务器在组www-data下运行)
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
请参阅:https://laracasts.com/discuss/channels/general-discussion/laravel-framework-file-permission-security
关于你的问题: 似乎有一个正在运行的进程每天使用root权限创建日志文件。你确定没有相同的cron设置吗?
如果没有,请在storage / logs目录中运行ls -l
并将输出粘贴到此处。 (在手动更改权限之前执行此操作)
答案 1 :(得分:1)
看起来他们之前曾在这里处理similar issue。你有手动运行或通过cron运行的工匠命令吗?如果是这样,那么修复它以便它们作为您的Web用户运行可能会有所帮助。
如果没有,我认为最适合您的解决方案是this one:
sudo setfacl -R -m u:www-data:7 /full/path/to/storage
如果命令不起作用,我挖出了一个可能的替代形式:
setfacl -d -m g:www-data:rw /full/path/to/laravel/storage/logs
setfacl
并不像它应该的那样受欢迎,它实际上是为网络服务器设置权限的最佳方式之一。