每次我创建一个新视图时,我必须将存储/视图CHMOD到777,然后是775


Laravel on MAMP every time I create a new view, I have to CHMOD storage/views to 777, then 775

我正在通过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这些文件,这样你就不会把缓存的视图等从开发环境拉到你的服务器上。

自从(我认为)狮子,web服务器不再使用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
    
  • 或者(更好的)将storage目录chown改为jason:_www,这样您可以保留775权限,并且您和apache都有足够的访问权限。

    sudo chown -R jason:_www storage