我正在阅读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,则没有错误。它似乎与Blade有关。
相关:始终确保.gitignore这些文件,以便您最终不会使用缓存视图等,从您的开发环境中拉到您的服务器上。
答案 0 :(得分:5)
由于(我认为)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
(对于开发,这是“ok”)
chmod -R 777 storage
或(更好)chown
storage
目录到jason:_www
,这样您就可以保留775
权限,并且您和apache都有足够的权限。
sudo chown -R jason:_www storage