我正在通过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