Bootstrap资源加载在linux和windows中不同

I have a Zend Framework application with a custom library for my company. The resources I've created under the custom library load just fine in Windows on our dev environments. I just tried to move this to a linux box this morning and I'm getting the following error:

Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Resource matching "errorLogger" not found' in /home/nick/Repos/myfirstzend.com/includes/library/Zend/Application/Bootstrap/BootstrapAbstract.php on line 694

I have my plugin path set in the constructor of my bootstrap like this:

$this->setOptions(array(
            'pluginPaths' => array('Company_Application_Resource' => 'Company/Application/Resource')
));

I then try to pass the following array (in a different _init method within the bootstrap):

$resources['errorLogger'] = array(
                'stream' => array(
                    'writerName' => 'db',
                    'writerParams' => array(
                        'db' => array(
                            'dbname' => APPLICATION_PATH . '/logs/errorLog.sqlite'
                        )
                    )
                )
            );

to the following method:

$this->registerPluginResource($resourceName, $resourceOptions);

Where $resourceName is the key of that initial array ('errorLogger') and $resourceOptions is the array at that key.

I have ErrorLogger.php under library/Company/Application/Resource/ and the class name is class Company_Application_Resource_ErrorLogger extends Zend_Application_Resource_Log.

I'm at a loss. Anyone see what I'm doing wrong?

Is there a series of var_dumps I could do to figure this out? I'm at a loss here.

Edit: Bootstrap code.

php
doudiejian5827
doudiejian5827 添加了一个链接。我的引导程序非常大。不想创造太多的混乱。
接近 8 年之前 回复
dstt1818
dstt1818 你可以发布完整的Bootstrap文件代码吗?
接近 8 年之前 回复
dtry54612
dtry54612 $resources只是我经历的一个数组。如果我重命名数组,什么都不会改变。它没有直接与Zend交互。
接近 8 年之前 回复
dongmeirang4679
dongmeirang4679 这可能是愚蠢的但是如果你调用数组$resource[]而不是资源[]。
接近 8 年之前 回复
dongtaogu8510
dongtaogu8510 我要采取的下一步是将其称为ErrorLogger以外的其他步骤。我显然没有想法,经过133次观看后,似乎其他人也是如此。所以我会看到它的作用。
接近 8 年之前 回复
doudeng2184
doudeng2184 不,我认为没有区别。
接近 8 年之前 回复
dttvb115151
dttvb115151 注册资源后,当您使用$this->getPluginResources()或$this->getPluginResourceNames()获取资源时,Linux/Win之间是否存在差异?
接近 8 年之前 回复
dqp10099
dqp10099 仍然看到同样的问题。我现在有xdebug设置,但我不知道我在寻找什么。我确切地知道它在哪里死了,但显然在此之前出现了问题。有关寻找什么的任何建议?哪里有突破点?
接近 8 年之前 回复
dsirr48088
dsirr48088 为了好玩,我还尝试添加autoloaderNamespaces[]=“公司”。在我的上一篇评论中有一个转录错字。“n”应该大写。它在我的application.ini中大写。
接近 8 年之前 回复
doubu4826
doubu4826 我已经做过'autoloadnamespaces[]=“公司”
接近 8 年之前 回复
doubinchou4219
doubinchou4219 如何在application/config/application.ini中添加:autoloadernamespaces[]=“公司”?不应该被要求,因为它在你的Windows开发机器上没有它,但也许值得一试。
接近 8 年之前 回复
drl37530
drl37530 是。这就是我注册的方式。它仍然不适用于首都“E”。现在,这也发生在不同的Linux系统上。
接近 8 年之前 回复
dsj1961061
dsj1961061 你是不是像foreach那样使用资源数组($resourceas$resourceName=>$resourceOptions)$this->registerPluginResource($resourceName,$resourceOptions);它仍然不适用于首都E?
大约 8 年之前 回复
doushitang4276
doushitang4276 是的,拼写是我的坏。
大约 8 年之前 回复
duanqun9740
duanqun9740 我假设这里有转录拼写而不是代码中的直接拷贝:类Comapny_Application_Resource_ErrorLogger扩展了Zend_Application_Resource_Log。注意拼写错误的Comapny。
大约 8 年之前 回复
douhao2026
douhao2026 只是一个提示:这是您在IDE中使用交互式调试器轻松解决的问题之一。(即xDebugger和ZendDebugger)
大约 8 年之前 回复
drbd65446
drbd65446 如果我输入$resources['ErrorLogger']仍然是同样的错误
大约 8 年之前 回复
doushi2845
doushi2845 jmbertucci是对的,99%是NAME的问题
大约 8 年之前 回复
duanpu1111
duanpu1111 我在Win/Linux和未查找文件之间遇到的最大问题是目录名称的区分大小写。PHP哈希也区分大小写。这可能是个问题吗?$resources['errorLogger']=>$resources['ErrorLogger']?我不认为它会因为PHP上的PHP应该有相同的错误,但它是一个猜测。
大约 8 年之前 回复

2个回答



尝试使用Xdebug逐步完成问题区域以及可以交互式调试它的东西(例如Eclipse PDT)。 这应该可以让你知道为什么会出现问题。</ p>

如果没有转储所有的库代码,这似乎是我能想出的唯一答案。</ p> \ n

另外,我会尝试重命名资源。 如果我记得,Zend对该名称的资源有疑问。</ p>
</ div>

展开原文

原文

Try stepping through the problem area using Xdebug along with something that will let you interactively debug it (e.g. Eclipse PDT). This should give you an idea of why things are going awry.

Short of dumping all of your library code, this seems like the only answer I can come up with.

Also, I would try renaming the resource. If I recall, Zend has a problem with a resource of that name.

dongxinyue2817
dongxinyue2817 哇。 我完全忘了试着把它称为其他东西...... F我。 差不多两个月了。 享受你的200代表:(
接近 8 年之前 回复
doulei3488
doulei3488 Stackoverflow告诉我,我还剩1小时奖励这笔赏金,你的答案得分更高。 所以我打算给你。 请注意,我的问题仍未解决。
接近 8 年之前 回复

Are you sure you have used the right path? I think you should use an absolute path build with the APPLICATION_PATH variable. Use the realpath function if ../ is included in your path relative to APPLICATION_PATH

Furthermore I will give you some code I use concerning the autoloader, maybe it helps.

    /**
 * Register namespace App_
 * @return Zend_Application_Module_Autoloader
 */
protected function _initAutoload() {
    $autoloader = new Zend_Application_Module_Autoloader ( array ('namespace' => 'App_', 'basePath' => APPLICATION_PATH ) );
    return $autoloader;
}

If you have your library in an other include path than the default one you can add the custom library include path in your application.ini and the namespace as well as shown bellow.

includePaths.library = APPLICATION_PATH "/../../www_company_library"
autoloaderNamespaces[] = 'Company';
doudui1850
doudui1850 如果你阅读了我的问题的所有评论,你会看到我解决了这个问题。 我试过大写和小写'e'/'E'
接近 8 年之前 回复
douyun1950
douyun1950 你写了一篇关于$ resources ['ErrorLogger']的评论,但你的错误信息是关于errorLogger的。 注意e和E的区别。此外,在Windows文件路径上应该不区分大小写,但在linux上不是。
接近 8 年之前 回复
doutang1946
doutang1946 你的问题是引导顺序吗?
接近 8 年之前 回复
dongxing1853
dongxing1853 这个问题不能成为我的道路。 我有其他资源在该库中正常工作。 唯一有问题的是ErrorLogger。
接近 8 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐