1

我正在阅读 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 处理,这样您就不会最终将缓存视图等从您的开发环境中拉到您的服务器上。

4

1 回答 1

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目录的写访问权。直到创建新视图...

现在你可以做的是:

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

  • 要么将storage目录设置为777(对于开发,这是“好的”)

    chmod -R 777 storage
    
  • 或者(更好)目录到chown,这样你可以保留权限,你和 apache 都有足够的访问权限。storagejason:_www775

    sudo chown -R jason:_www storage
    
于 2013-03-08T09:32:53.767 回答