2013-08-20 67 views
2

我一直在一个网站上工作了大约一个月,我最近尝试了一些东西,现在我真的坚持刚刚弹出的缓存权限问题向上。我读过关于计算器的一切在这个问题上,例如:cakephp SplFileInfo :: openFile myapp_cake_core_cake_console未能打开流:权限被拒绝

SplFileInfo::openFile(/app/tmp/cache/persistent/cake_core_cake_console_):failed to open stream:Permission denied in /lib/.../FileEngine.php line 293

Cakephp Permission denied Fileengine.php

包括错误/非错误:http://cakephp.lighthouseapp.com/projects/42648/tickets/2172

但我仍然无法阻止出现这种错误在插件使用HTML->脚本助手加载JavaScript资源期间。

警告: SplFileInfo ::中openFile(在/ var/WWW/2tli /应用程序的/ tmp /缓存/永久/ myapp_cake_core_cake_console_): 未能打开流:权限在 在/ var/WWW/2tli/lib中否认/Cake/Cache/Engine/FileEngine.php上线314

调用堆栈: 0.0009 352948 1. {主}()/var/www/2tli/app/webroot/index.php:0

0.0045  446644 2. include('/var/www/2tli/lib/Cake/bootstrap.php') /var/www/2tli/app/webroot/index.php:92 

0.0327 1174292 3. Configure::bootstrap() /var/www/2tli/lib/Cake/bootstrap.php:171 

0.0427 1406772 4. include('/var/www/2tli/app/Config/core.php') /var/www/2tli/lib/Cake/Core/Configure.php:78 

0.0494 1512200 5. Cache::config() /var/www/2tli/app/Config/core.php:336 

0.0495 1512940 6. Cache::_buildEngine() /var/www/2tli/lib/Cake/Cache/Cache.php:136 

0.0562 1635708 7. FileEngine->gc() /var/www/2tli/lib/Cake/Cache/Cache.php:169 

0.0562 1635796 8. FileEngine->clear() /var/www/2tli/lib/Cake/Cache/Engine/FileEngine.php:102 

0.0617 1637516 9. FileEngine->_setKey() /var/www/2tli/lib/Cake/Cache/Engine/FileEngine.php:236 

0.0627 1657060 10. trigger_error() /var/www/2tli/lib/Cake/Cache/Engine/FileEngine.php:314 

我是运行PHP 5.3.10。 Cake 2.3.7。我在bootstrap.php中的以下内容:

// Setup a 'default' cache configuration for use in the application. 
Cache::config('default', array('engine' => 'File', 'mask' => 0666)); 

而且在core.php中:

/** 
* Configure the cache used for general framework caching. Path information, 
* object listings, and translation cache files are stored with this configuration. 
*/ 
Cache::config('_cake_core_', array(  
    'engine' => $engine,  
    'prefix' => $prefix . 'cake_core_',  
    'path' => CACHE . 'persistent' . DS,  
    'serialize' => ($engine === 'File'),  
    'duration' => $duration, 
       'mask'=>0666)); 

    Cache::config('_cake_model_', array(
     'engine' => $engine, 
     'prefix' => $prefix.'cake_model_', 
     'path' => CACHE . 'models' . DS, 
     'serialize' => ($engine === 'File'), 
     'duration' => $duration, 
     'mask' => 0666 
)); 

我插件也有一个bootstrap.php中:

Cache::config('UserPlugin', array(
    'engine' => 'File', 
    'duration'=> '+3 months', 
    'path' => CACHE, 
    'prefix' => 'UserPlugin_', 
      'mask'=>0666 
)); 

我已经把所有的应用程序/ tmp文件和文件夹作为我的apache拥有者www-data并设置为777(我也尝试过666来匹配掩码)。

我已经删除并重建了app/tmp目录。

有没有人有任何想法?

编辑:我不知道该怎么做,但我注意到注释掉Html->脚本助手有时不会删除错误(并且原始html仍显示脚本包含) 。所以我盯着删除缓存并将缓存持续时间设置为1秒。只是偶尔它的行为如预期,因为html似乎被缓存。我发现始终如一地按照预期工作(无论是在注释还是注释行中)时,唯一的方法是删除缓存并重新启动浏览器(firefox)。然后,无论何时在重新启动Firefox后再次输入html->脚本,Cake都可以在没有权限错误的情况下运行。我相信问题会回来,因为我似乎无法找到根本原因。

+0

你在app/tmp/cache目录中包含了模型,视图和持久子文件夹吗? –

+0

@ joshua.paling是的www数据和777.我真的被困在这一个... – user6972

+0

你的服务器上是否有剩余空间?你可以通过普通的FTP手动在这些目录中创建文件吗? –

回答

0

目前我仍然不清楚我的系统上发生了什么,但我已确认关闭浏览器并重新启动它可以解决此问题。

我在本地系统上用Firefox 23.0测试,使用firebug & firephp。

另外我发现如果我通过一个助手在前面已经呈现的视图中添加一个$ this-> Js->链接,那么新的JS脚本将不会出现,直到浏览器停止并重新启动。 (没关系,如果cakephp缓存被清除或不)。

我不知道这是否是某种firefox/firebug或apache或cake问题。

编辑:我也发现将这个文件移动到app/webroot/js而不是通过插件提供它的工作100%的时间。也许这个资产如何得到蛋糕的服务存在一个错误?

2

我发现与Bake这样做的问题是限制在持久缓存中的文件的权限。这意味着我的网站创建了它们(www-data),并没有给我的控制台应用程序使用该文件的完整读/写/执行权限。

我解决了这个问题,通过改变在持续的文件夹中的文件的权限

cd ./app/tmp/cache/persistent/ 
sudo chmod 777 * 

我不得不使用sudo,因为我是不是该文件的所有者;该网站(万维网数据)是。

希望这可以帮助别人。

相关问题