Laravel 在 MAMP 上每次创建新视图时,我都必须将存储/视图 CHMOD 到 777,然后是 775

Posted

技术标签:

【中文标题】Laravel 在 MAMP 上每次创建新视图时,我都必须将存储/视图 CHMOD 到 777,然后是 775【英文标题】:Laravel on MAMP every time I create a new view, I have to CHMOD storage/views to 777, then 775 【发布时间】:2013-03-07 23:38:17 【问题描述】:

我正在阅读 Shawn McCool 的书(很棒的书),每次创建新视图并尝试加载它时,都会出现权限错误。

我想知道为什么生成的视图没有读取权限。奇怪的是,如果我 chmod 到 775,我仍然得到错误,我必须先到 777,然后再到 775。

谁能解释一下这件事以及为什么会这样?

谢谢!

编辑:

添加新视图后出错

file_put_contents(/Users/jason/Sites/laravel1/storage/views/5c4b7b4707d658dffe52d481be6c680e): failed to open stream: Permission denied

Permissions on storage/views
drwxrwxr-x@  7 jason  jason  238 Mar  7 17:15 views

新视图的权限 -rw-r--r--

chmod 775 views之后出错

 file_put_contents(/Users/jason/Sites/laravel1/storage/views/5c4b7b4707d658dffe52d481be6c680e): failed to open stream: Permission denied

chmod 775 views之后的权限

drwxrwxr-x@  7 jason  jason  238 Mar  7 17:15 views

chmod 777 views 之后就可以了

drwxrwxrwx@  8 jason  jason  272 Mar  7 17:25 views

chmod 777 views 之后它仍然有效

drwxrwxr-x@  8 jason  jason  272 Mar  7 17:25 views

但这是一个转折点,如果我不使用 viewname.blade.php,我就没有这个问题。如果我做了viewname.php,就没有错误。好像和刀有关系。

编辑 2:

相关:始终确保 .gitignore 这些文件,这样您就不会以缓存视图等结束,从您的开发环境中被拉到您的服务器上。

【问题讨论】:

如果权限设置为 775 则为... @jtheman 我不关注。这是我正在经历的行为。我每次都必须重置视图目录的权限。如果我直接转到 775,我仍然会收到错误。 @shapeshifter 实际上是 umask。它设置为 0022。知道如何在每次创建新视图时都无需 CHMOD 来克服这个问题吗?也许回答这个问题,因为这至少是我问题的根源。 Apache 没有以用户“jason”的身份运行,而是以“httpd”或“apache”的身份运行。 chown -R jason:apache /Users/jason/Sites @Jason 如果您使用刀片引擎,您的存储文件夹将用于保存视图的缓存副本,因此您的权限问题。没有刀片引擎,视图只是eval'd,然后返回没有存储/缓存机制。 【参考方案1】:

由于(我认为)Lion,网络服务器不再使用 mod_userdir,因此 apache 不再以您的用户身份运行,而是以 _www 身份运行,请参阅

user:~$ ps ax -o pid,user,rgroup,comm | grep -Ee "PID|httpd"
  PID USER             RGID COMM
10317 root                0 /usr/sbin/httpd
16516 _www               70 /usr/sbin/httpd
18497 _www               70 /usr/sbin/httpd
...

现在您的文件夹具有权限775、用户jason 和组jason

drwxrwxr-x@ 7 jason jason 238 Mar 7 17:15 storage/views

Laravel 将尝试为该文件夹中的每个刀片视图创建一个缓存文件。如果不存在这样的文件,它将尝试自动创建该文件。这需要对文件夹的写访问权限,并且由于 Apache 以_www 运行,因此需要对该目录的写访问权限为其他

然而,一旦文件存在,该文件就归_www 所有,因此Apache 不再需要对storage/views 目录的写访问权。直到创建新视图...

现在你可以做的是:

(请记住,storage 中除了storage/views 之外还有其他缓存,所以这里的所有内容都是在整个storage 文件夹上完成的)

storage 目录设置为777(对于开发来说,这是“好的”)

chmod -R 777 storage

或者(更好的)chownstorage目录到jason:_www,这样你可以保留775权限并且你和apache都有足够的访问权限。

sudo chown -R jason:_www storage

【讨论】:

谢谢,这是正确的解决方案(第二个选项) 这应该与 Git 没有任何关系,问题是 OSX apache 没有以您的用户身份运行,因此无法写入缓存/存储目录。尽管您在缓存中是对的,但存储不应该在版本控制中 - 在任何项目中。 你说得对,我没有花时间重新阅读我的原始问题并将其误认为是另一个问题。已编辑!

以上是关于Laravel 在 MAMP 上每次创建新视图时,我都必须将存储/视图 CHMOD 到 777,然后是 775的主要内容,如果未能解决你的问题,请参考以下文章

使用MAMP在OSX上安装Laravel 5.1

每次重新加载时删除 Laravel 的存储/视图文件

每次重新启动时都会重置 MAMP 配置设置

在 MAMP 中使用 Laravel 设置 PostgreSQL

MAMP 和创建新用户和 MySQL

尝试迁移Laravel数据库时出错