Kohana无法在服务器上找到模板,但它在localhost上运行正常

时间:2014-04-16 04:35:07

标签: php apache2 kohana-3

我正在研究开发中部署webapp的问题,但我终于找到了一个我自己无法理解的问题。

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

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

  

View_Exception [0]:找不到请求的视图index.tpl

如果我手动访问我的其他控制器的uris,我会得到相同的消息,替换模板文件名。在堆栈跟踪之后,当框架尝试加载模板文件时,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的bootstrap中启用了。然而它没有被装载。有什么想法吗?

1 个答案:

答案 0 :(得分: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