我使用宅基地,我最近更新了我的申请到Laravel5.8。从那时起,每当我尝试登录/注销时,我都会收到权限错误。
我所遇到的错误如下:
UnexpectedValueException
The stream or file "/home/vagrant/Code/myapp/storage/logs/laravel-2022-04-11.log" could not be opened in append mode: failed to open stream: Permission denied下面是my /storage/logs文件夹的ll (没有ssh进入家园):
drwxrwsrwx 2 username www-data 4096 Apr 12 01:32 ./
drwxrwsrwx 5 username www-data 4096 Oct 27 2020 ../
-rwxrwxrwx 1 username www-data 11700 Nov 28 21:25 laravel-2021-11-28.log*
-rwxrwxrwx 1 username www-data 5850 Feb 9 21:13 laravel-2022-02-09.log*
-rwxrwxrwx 1 username www-data 203687 Feb 13 22:58 laravel-2022-02-13.log*
-rwxrwxrwx 1 username www-data 19324 Apr 12 01:39 laravel-2022-04-11.log*下面是my /storage/logs文件夹的一个ll (使用ssh进入家园):
drwxrwxrwx 1 vagrant vagrant 4096 Apr 11 22:32 ./
drwxrwxrwx 1 vagrant vagrant 4096 Oct 27 2020 ../
-rwxrwxrwx 1 vagrant vagrant 11700 Nov 28 19:25 laravel-2021-11-28.log*
-rwxrwxrwx 1 vagrant vagrant 5850 Feb 9 19:13 laravel-2022-02-09.log*
-rwxrwxrwx 1 vagrant vagrant 203687 Feb 13 20:58 laravel-2022-02-13.log*
-rwxrwxrwx 1 vagrant vagrant 19324 Apr 11 22:39 laravel-2022-04-11.log*注意,用户/组是不同的。不要太注意当前的权限--如果我将默认权限放入,则不会发生任何更改。
现在,假设我试着登录。将发生的情况是,我将得到我在开始时说过的错误,最后一个日志文件(当前的每日文件)的权限将更改为:
-rw-rw-r-- 1 vagrant vagrant 95308 Apr 11 22:48 laravel-2022-04-11.log如果我跑:
sudo chmod -R 777 storage bootstrap/cache然后文件的权限返回到:
-rwxrwxrwx 1 vagrant vagrant 95308 Apr 11 22:48 laravel-2022-04-11.log*当我刷新页面时,登录就正常了。
显然,www-data用户在尝试登录时试图在日志文件中写入某些内容,但由于权限不是777 (而且它们不应该是),它失败了。
在我的config/logging.php文件中,我可以看到以下内容:
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
'permission' => 0664,
],注意'permission' => 0664部分。这就是为什么当我尝试登录时文件的权限会改变的原因。如果我将它更改为0777,它可以工作,但我在/storage/framework/sessions目录中得到了一个权限错误。此外,出于安全考虑,这一数字应保持在0664。
在这个问题上,我已经试过每一个答案,但都没有效果。
我的生产服务器工作正常(谢天谢地)。
有什么主意吗?
发布于 2022-04-12 09:24:25
我花了好几天时间才解决这件事,所以这是对我有效的方法。
这是一个“流浪/家园”的问题。当Homestead启动时,应该已经设置了正确的权限/所有者;以后无法更改它们(既不能从-ssh内部更改,也不能从宅基地外部进行更改)。
根据流浪者DOC,我们可以使用Vagrantfile为某些目录设置不同的权限。对我起作用的是在我的Vagrantfile文件中包括以下内容:
config.vm.synced_folder "/home/username/Code/myapp/", "/home/vagrant/Code/myapp", :owner => "www-data", :group => "www-data"添加此配置后,我的项目文件夹/文件由www-data在Homestead中拥有。
一些重要的注意事项:
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|部分。/home/username/Code/myapp/)是指向主机上的项目目录的路径(即。您的pc)和第二个路径(/home/vagrant/Code/myapp)是在您的VM/增值/家园环境内的路径。homestead up --provision时检查输出来验证Homestead是否在使用您的更改。我的看上去像这样:==> homestead-7: Mounting shared folders...
homestead-7: /vagrant => /home/username/Homestead
homestead-7: /home/vagrant/Code => /home/username/Code
homestead-7: /home/vagrant/Code/myapp => /home/username/Code/myapp最后一行是我们添加的。这一行homestead-7: /home/vagrant/Code => /home/username/Code是在Homestead.yaml文件上配置的默认映射:
folders:
- map: ~/Code
to: /home/vagrant/Code因此,在我的示例中,Code目录具有默认权限,而Code/myapp目录以www-data作为所有者。您可以在任意多个目录中设置权限。
https://stackoverflow.com/questions/71835214
复制相似问题