2014-04-16 31 views
0

我正在开发webapp的部署工作,但终于碰到了一个我无法弄清楚我的问题拥有。Kohana无法在服务器上找到模板,但它在本地主机上工作正常

我在我的svn中有一个post-commit挂钩,它将我所有的提交部署到一个临时站点,以确保在我推送到生产之前没有任何间断。因此,假设我的本地工作副本没有挂起的提交,localhost和staging具有相同的文件。

现在,我的localhost工作得很好(代码库不完整,但这是一个完全独立的问题)。在我的临时网站,但是,我得到的Kohana框架以下异常:

View_Exception [0]:请查看index.tpl里找不到

如果我手动访问的URI的我的其他控制器,我得到相同的消息,与模板文件名替换。在堆栈跟踪之后,当框架试图加载我的模板文件时,错误发生在View工厂的before函数中 - 如预期的那样。

我的views目录(和其中包含的所有文件)与我的项目中的所有其他目录具有相同的权限,所以我不确定PHP为什么无法读取目录或文件。我也确认这些文件确实存在于服务器上。

我的错误日志没有显示任何内容;我的访问日志显示500错误。 Kohana日志文件显示屏幕上显示的相同信息。

我真的很困惑,为什么会发生这种情况。这个框架显然是正常运作的,因为我得到了Kohana的格式化异常,并且Kohana日志正在写入。自动加载器找到我的控制器类,因为当我访问使用不同模板的各种控制器时,“缺失”文件会相应地更改。但是服务器的行为与我的本地主机不匹配,我只好搔着我的脑袋。


看着Kohana::find_file之后,这回false的方法,我得出这样的Kohana正在寻找index.tpl.php的结论。我添加了一些跟踪调试来确认,我是正确的:在我的本地主机上,Kohana正在寻找views\index.tpl,而在我的服务器上,它正在寻找views/index.tpl.php。然而,第二个奇怪的现象出现了,这可能是第一个解释。这是文件的完整列表find_file尝试一下我的本地机器和我的服务器上加载了我的索引页时:

LOCAL:            SERVER: 
classes\I18n.php         classes/I18n.php 
classes\Kohana\I18n.php       classes/Kohana/I18n.php 
classes\HTTP.php         classes/HTTP.php 
classes\Kohana\HTTP.php       classes/Kohana/HTTP.php 
classes\Kohana\Exception.php      classes/Kohana/Exception.php 
classes\Kohana\Kohana\Exception.php    classes/Kohana/Kohana/Exception.php 
classes\Log.php         classes/Log.php 
classes\Kohana\Log.php        classes/Kohana/Log.php 
classes\Config.php         classes/Config.php 
classes\Kohana\Config.php       classes/Kohana/Config.php 
classes\Log\File.php        classes/Log/File.php 
classes\Kohana\Log\File.php      classes/Kohana/Log/File.php 
classes\Log\Writer.php        classes/Log/Writer.php 
classes\Kohana\Log\Writer.php      classes/Kohana/Log/Writer.php 
classes\Config\File.php       classes/Config/File.php 
classes\Kohana\Config\File.php      classes/Kohana/Config/File.php 
classes\Kohana\Config\File\Reader.php    classes/Kohana/Config/File/Reader.php 
classes\Kohana\Config\Reader.php     classes/Kohana/Config/Reader.php 
classes\Kohana\Config\Source.php     classes/Kohana/Config/Source.php 
classes\Route.php         classes/Route.php 
classes\Kohana\Route.php       classes/Kohana/Route.php 
classes\Cookie.php         classes/Cookie.php 
classes\Kohana\Cookie.php       classes/Kohana/Cookie.php 
classes\Session.php        classes/Session.php 
classes\Kohana\Session.php       classes/Kohana/Session.php 
classes\Request.php        classes/Request.php 
classes\Kohana\Request.php       classes/Kohana/Request.php 
classes\HTTP\Request.php       classes/HTTP/Request.php 
classes\Kohana\HTTP\Request.php     classes/Kohana/HTTP/Request.php 
classes\HTTP\Message.php       classes/HTTP/Message.php 
classes\Kohana\HTTP\Message.php     classes/Kohana/HTTP/Message.php 
classes\HTTP\Header.php       classes/HTTP/Header.php 
classes\Kohana\HTTP\Header.php      classes/Kohana/HTTP\Header.php 
classes\Request\Client\Internal.php    classes/Request/Client/Internal.php 
classes\Kohana\Request\Client\Internal.php   classes/Kohana/Request/Client/Internal.php 
classes\Request\Client.php       classes/Request/Client.php 
classes\Kohana\Request\Client.php     classes/Kohana/Request/Client.php 
classes\Arr.php         classes/Arr.php 
classes\Kohana\Arr.php        classes/Kohana/Arr.php 
classes\Response.php        classes/Response.php 
classes\Kohana\Response.php      classes/Kohana/Response.php 
classes\HTTP\Response.php       classes/HTTP/Response.php 
classes\Kohana\HTTP\Response.php     classes/Kohana/HTTP/Response.php 
classes\Profiler.php        classes/Profiler.php 
classes\Kohana\Profiler.php      classes/Kohana/Profiler.php 
classes\Controller\Home.php      classes/Controller/Home.php 
classes\Controller\HFTemplate.php     classes/Controller/HFTemplate.php 
classes\Controller\Template.php     classes/Controller/Template.php 
classes\Kohana\Controller\Template.php    classes/Kohana/Controller/Template.php 
classes\Controller.php        classes/Controller.php 
classes\Kohana\Controller.php      classes/Kohana/Controller.php 
classes\View.php         classes/View.php 
classes\Kohana\View.php       classes/Kohana/View.php 
classes\Smarty\View.php 
config\smarty.php 
classes\Config\Group.php 
classes\Kohana\Config\Group.php 
vendor\smarty/libs/Smarty.class.php 
classes\URL.php 
classes\Kohana\URL.php 
classes\Smarty\Helper.php 
classes\Kohana\Smarty\Helper.php 
views\index.tpl         views/index.tpl.php 
classes\Auth.php 
classes\Kohana\Auth.php 
config\auth.php 
classes\Auth\ORM.php 
classes\Kohana\Auth\ORM.php 
config\session.php 
classes\Session\Database.php 
classes\Kohana\Session\Database.php 
classes\Database.php 
classes\Kohana\Database.php 
config\database.php 
classes\Database\PDO.php 
classes\Kohana\Database\PDO.php 
classes\DB.php 
classes\Kohana\DB.php 
classes\Database\Query\Builder\Select.php 
classes\Kohana\Database\Query\Builder\Select.php 
classes\Database\Query\Builder\Where.php 
classes\Kohana\Database\Query\Builder\Where.php 
classes\Database\Query\Builder.php 
classes\Kohana\Database\Query\Builder.php 
classes\Database\Query.php 
classes\Kohana\Database\Query.php 
classes\Database\Result\Cached.php 
classes\Kohana\Database\Result\Cached.php 
classes\Database\Result.php 
classes\Kohana\Database\Result.php 
classes\ORM.php 
classes\Kohana\ORM.php 
classes\Model.php 
classes\Kohana\Model.php 
classes\Model\User.php 
classes\Model\Auth\User.php 
classes\Inflector.php 
classes\Kohana\Inflector.php 
config\inflector.php 
classes\UTF8.php 
classes\Kohana\UTF8.php 
classes\Model\Role.php 
classes\Model\Auth\Role.php 
                classes/View/Exception.php 
                classes/Kohana/View/Exception.php 
                classes/Debug.php 
                classes/Kohana/Debug.php 
                classes/Date.php 
                classes/Kohana/Date.php 
                views/kohana/error.php 
                classes/Text.php 
                classes/Kohana/Text.php 
(page content)          (exception page content) 
classes\Database\Query\Builder\Update.php 
classes\Kohana\Database\Query\Builder\Update.php 

存在这样的情况,系统应该将得到的Smarty模块差距类,但不是。看到这个之后,我确认了Smarty模块确实存在于服务器上,并且它在Kohana的引导程序中启用。但它没有被加载。有任何想法吗?

+0

任何你忘记在'app中启用Smarty的机会lication/bootstrap.php'? (在'Kohana :: modules'部分)。 –

+0

@RaelGugelminCunha:“看到这个之后,我确认了Smarty模块确实存在于服务器上,并且它在Kohana的引导程序中启用了。” –

回答

1

事实证明,问题的根源在Linux上是区分大小写的。我在模块作者his GitHub repository的帮助下得出了这个结论。我以为他会在不久的将来库修复此错误,但是,修复被改变的4个文件的名称:

  • MODPATH/smarty/classes/view.phpView.php
  • MODPATH/smarty/classes/Smarty/view.phpView.php
  • MODPATH/smarty/classes/Smarty/helper.phpHelper.php
  • MODPATH/smarty/classes/Kohana/Smarty/helper.phpHelper.php
相关问题