首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为Laravel5.8在宅基地设置/storage和/bootstrap/cache权限

为Laravel5.8在宅基地设置/storage和/bootstrap/cache权限
EN

Stack Overflow用户
提问于 2022-04-11 22:57:59
回答 1查看 310关注 0票数 0

我使用宅基地,我最近更新了我的申请到Laravel5.8。从那时起,每当我尝试登录/注销时,我都会收到权限错误。

我所遇到的错误如下:

代码语言:javascript
运行
复制
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进入家园):

代码语言:javascript
运行
复制
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进入家园):

代码语言:javascript
运行
复制
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*

注意,用户/组是不同的。不要太注意当前的权限--如果我将默认权限放入,则不会发生任何更改。

现在,假设我试着登录。将发生的情况是,我将得到我在开始时说过的错误,最后一个日志文件(当前的每日文件)的权限将更改为:

代码语言:javascript
运行
复制
-rw-rw-r-- 1 vagrant vagrant  95308 Apr 11 22:48 laravel-2022-04-11.log

如果我跑:

代码语言:javascript
运行
复制
sudo chmod -R 777 storage bootstrap/cache

然后文件的权限返回到:

代码语言:javascript
运行
复制
-rwxrwxrwx 1 vagrant vagrant  95308 Apr 11 22:48 laravel-2022-04-11.log*

当我刷新页面时,登录就正常了。

显然,www-data用户在尝试登录时试图在日志文件中写入某些内容,但由于权限不是777 (而且它们不应该是),它失败了。

在我的config/logging.php文件中,我可以看到以下内容:

代码语言:javascript
运行
复制
     'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
            'days' => 14,
            'permission' => 0664,
        ],

注意'permission' => 0664部分。这就是为什么当我尝试登录时文件的权限会改变的原因。如果我将它更改为0777,它可以工作,但我在/storage/framework/sessions目录中得到了一个权限错误。此外,出于安全考虑,这一数字应保持在0664。

在这个问题上,我已经试过每一个答案,但都没有效果。

我的生产服务器工作正常(谢天谢地)。

有什么主意吗?

EN

回答 1

Stack Overflow用户

发布于 2022-04-12 09:24:25

我花了好几天时间才解决这件事,所以这是对我有效的方法。

这是一个“流浪/家园”的问题。当Homestead启动时,应该已经设置了正确的权限/所有者;以后无法更改它们(既不能从-ssh内部更改,也不能从宅基地外部进行更改)。

根据流浪者DOC,我们可以使用Vagrantfile为某些目录设置不同的权限。对我起作用的是在我的Vagrantfile文件中包括以下内容:

代码语言:javascript
运行
复制
    config.vm.synced_folder "/home/username/Code/myapp/", "/home/vagrant/Code/myapp", :owner => "www-data", :group => "www-data"

添加此配置后,我的项目文件夹/文件由www-data在Homestead中拥有。

一些重要的注意事项:

  1. 上面的配置需要进入Vagrantfile的Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|部分。
  2. 第一个路径(/home/username/Code/myapp/)是指向主机上的项目目录的路径(即。您的pc)和第二个路径(/home/vagrant/Code/myapp)是在您的VM/增值/家园环境内的路径。
  3. 记得在你做任何改变后准备好。
  4. 您可以通过在运行homestead up --provision时检查输出来验证Homestead是否在使用您的更改。我的看上去像这样:
代码语言:javascript
运行
复制
==> 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文件上配置的默认映射:

代码语言:javascript
运行
复制
folders:
    - map: ~/Code
      to: /home/vagrant/Code

因此,在我的示例中,Code目录具有默认权限,而Code/myapp目录以www-data作为所有者。您可以在任意多个目录中设置权限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71835214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档