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
或者(更好的)chown
storage
目录到jason:_www
,这样你可以保留775
权限并且你和apache都有足够的访问权限。
sudo chown -R jason:_www storage
【讨论】:
谢谢,这是正确的解决方案(第二个选项) 这应该与 Git 没有任何关系,问题是 OSX apache 没有以您的用户身份运行,因此无法写入缓存/存储目录。尽管您在缓存中是对的,但存储不应该在版本控制中 - 在任何项目中。 你说得对,我没有花时间重新阅读我的原始问题并将其误认为是另一个问题。已编辑!以上是关于Laravel 在 MAMP 上每次创建新视图时,我都必须将存储/视图 CHMOD 到 777,然后是 775的主要内容,如果未能解决你的问题,请参考以下文章