TemplateException:无法编写已编译的模板 - 在git clone之后

时间:2012-08-04 03:38:05

标签: php lithium

任何人都知道为什么在获得最新版本的锂后我会遇到这个例外?

( ! ) Fatal error:
  Uncaught exception 'lithium\template\TemplateException' with message
  'Could not write compiled template
  C:\Users\Master\Documents\Visual Studio 2010\Projects\PSER\PSER/resources/tmp/cache/templates/template_views_pages_index.html_0_1344056913_326.php
  to cache.' in
  C:\Users\Master\Documents\Visual Studio 2010\Projects\libraries\lithium\template\view\Compiler.php
  on line 81

( ! ) lithium\template\TemplateException:
  Could not write compiled template
  C:\Users\Master\Documents\Visual Studio 2010\Projects\PSER\PSER/resources/tmp/cache/templates/template_views_pages_index.html_0_1344056913_326.php
  to cache. in
  C:\Users\Master\Documents\Visual Studio 2010\Projects\libraries\lithium\template\view\Compiler.php
  on line 81

Call Stack

Time Memory Function Location

1 0.1070 331944 {main}( ) ..\index.php:0
2 0.2013 4387040 lithium\action\Dispatcher::run( ???, ??? ) ..\index.php:41
3 0.2013 4388248 lithium\core\StaticObject::filter( ???, ???, ???, ??? ) ..\Dispatcher.php:155
4 0.2013 4389784 lithium\util\collection\Filters::run( ???, ???, ??? ) ..\StaticObject.php:126
5 0.2014 4391752 {closure}( ???, ???, ??? ) ..\Filters.php:183
6 0.2015 4391752 lithium\util\collection\Filters->next( ???, ???, ??? ) ..\cache.php:46
7 0.2015 4391784 {closure}( ???, ???, ??? ) ..\Filters.php:202
8 0.2075 4427760 lithium\util\collection\Filters->next( ???, ???, ??? ) ..\action.php:51
9 0.2075 4427792 lithium\action{closure}( ???, ???, ??? ) ..\Filters.php:202
10 0.2198 4534776 lithium\core\StaticObject::invokeMethod( ???, ??? ) ..\Dispatcher.php:154
11 0.2198 4534808 lithium\action\Dispatcher::_call( ???, ???, ??? ) ..\StaticObject.php:75
12 0.2198 4535896 lithium\core\StaticObject::_filter( ???, ???, ???, ??? ) ..\Dispatcher.php:265
13 0.2198 4536152 lithium\action{closure}( ???, ???, ??? ) ..\StaticObject.php:119
14 0.2198 4536152 lithium\action\Controller->_invoke( ???, ???, ??? ) ..\Dispatcher.php:262
15 0.2199 4537752 lithium\core\Object->_filter( ???, ???, ???, ??? ) ..\Controller.php:198
16 0.2199 4538032 lithium\action{closure}( ???, ???, ??? ) ..\Object.php:238
17 0.2199 4538280 lithium\core\Object->invokeMethod( ???, ??? ) ..\Controller.php:184
18 0.2200 4538312 app\controllers\PagesController->view( ) ..\Object.php:165
19 0.2200 4538824 lithium\action\Controller->render( ??? ) ..\PagesController.php:32
20 0.2204 4541320 lithium\net\http\Media::render( ???, ???, ??? ) ..\Controller.php:266
21 0.2205 4550368 lithium\core\StaticObject::_filter( ???, ???, ???, ??? ) ..\Media.php:593
22 0.2206 4550616 lithium\net\http{closure}( ???, ???, ??? ) ..\StaticObject.php:119
23 0.2208 4553656 lithium\core\StaticObject::invokeMethod( ???, ??? ) ..\Media.php:590
24 0.2208 4553984 lithium\net\http\Media::_handle( ???, ???, ??? ) ..\StaticObject.php:75
25 0.2208 4555936 lithium\core\StaticObject::_filter( ???, ???, ???, ??? ) ..\Media.php:750
26 0.2209 4556184 lithium\net\http{closure}( ???, ???, ??? ) ..\StaticObject.php:119
27 0.2257 4579800 lithium\template\View->render( ???, ???, ??? ) ..\Media.php:746
28 0.2259 4583520 lithium\template\View->_step( ???, ???, ???, ??? ) ..\View.php:328
29 0.2259 4587040 lithium\core\Object->_filter( ???, ???, ???, ??? ) ..\View.php:389
30 0.2260 4587304 lithium\template{closure}( ???, ???, ??? ) ..\Object.php:238
31 0.2260 4587336 lithium\template\view\adapter\File->template( ???, ??? ) ..\View.php:386
32 0.2272 4588624 lithium\template\view\Compiler::template( ???, ??? ) ..\File.php:133

我非常确定路径中的斜线(向前或向后)不是问题。我创建了一个快速的小测试脚本,证明前向和反斜杠可以在Windows上的路径中共存。得到的路径是:

C:/Users/Master/Documents/Visual Studio 2010/Projects/PHP Prototyping/PHP Prototyping\ABC\testFile.txt

代码示例如下:

<?php
    $myFile = $_SERVER['DOCUMENT_ROOT'] . '\\ABC\\testFile.txt';
    $fh = fopen($myFile, 'w') or die('can\'t open file');
    $stringData = 'Bobby Bopper\n';
    fwrite($fh, $stringData);
    $stringData = 'Tracy Tanner\n';
    fwrite($fh, $stringData);
    fclose($fh);
?>

2 个答案:

答案 0 :(得分:3)

您的resources目录不可写,因此Lithium无法将已编译的模板写入resources/tmp/cache/templates

编辑:仔细检查resources目录是否存在,因为它不应该在git仓库中进行版本控制。

您可以使用此代码段动态创建,并拥有正确的权限:https://gist.github.com/1009460config/bootstrap/libraries.php

答案 1 :(得分:0)

问题是缓存下的模板文件夹不存在。

目录不存在,因为我没有将它添加到源代码控制中,因为tmp下的东西不应该从dev转到prd。写入模板缓存的问题始终存在,但最近对框架的更改导致php抛出错误而不是黑错误。

我已经在template / view / Compiler.php中添加了一些代码来处理缺失目录的创建。代码块的第一行是68,并没有更改。同样,结束行不会改变,因此您可以比较之前添加的内容。

    $compiled = static::compile(file_get_contents($file));

    $pathIsWritable = is_writable($cachePath);      
    if(!$pathIsWritable){
        $exMessage = ' File not writable. ';
        if(!file_exists($cachePath)) {
            $exMessage .= 'Path to file invalid. ';
            $dirCreated = mkdir($cachePath, 0777, true);

            if($dirCreated) {
                $pathIsWritable = true;
            }
            else {
                $exMessage .= 'Attempt to create the directory path failed.';   
            }
        }           
    }

    if ($pathIsWritable && file_put_contents($template, $compiled) !== false) {
        foreach (glob("{$options['path']}/template_{$oname}_*.php") as $expired) {