gpt4 book ai didi

coldfusion - CF扩展组件突然停止工作

转载 作者:行者123 更新时间:2023-12-03 11:23:36 27 4
gpt4 key购买 nike

我们有一组Coldfusion应用程序,它们都扩展了应用程序基础的各个部分。我将提供一些代码,然后解释我们所遇到的问题,看看是否有人可以阐明解决此问题的最佳方法:

在app.cfc的“ OnRequestStart”中,有以下几行可启动用户:

if(!structKeyExists(SESSION, 'user'))
SESSION.user = CreateObject("component","cfcs.ds_user");


然后在ds_user.cfc中将其命名为:

component extends="cas.cas_user" displayname="basic_user"{


该应用程序及其所有部分均按预期运行。但是,过了一会儿之后,应用程序似乎崩溃了,我不得不重新启动ColdFusion Service才能使其再次运行。我得到的错误是:

Could not find the ColdFusion component or interface cas.cas_user.


因此,过了一会儿,无论出于什么原因,我的应用程序都决定无法找到到父组件的路径。该cfc的映射位于顶部的application.cfc中,如下所示:

THIS.mappings["/cas"] = "#ReplaceNoCase(currpath,ListToArray(THIS.name,'_')[1],'cas30')#assets\cfcs\";


我想肯定要说的是,该应用程序可以按设计的完美运行一段随机的时间,然后它找不到父组件,并且在我重新启动服务器上的ColdFusion服务之前也找不到它。

我认为这可能是内存泄漏之类的东西,但是我不知道从哪里开始寻找解决问题的方法。我们有6个左右的其他应用程序以相同的方式扩展,它们可以正常工作并且永不崩溃,但是这个确实可以。

编辑:要更清楚地映射。我们的应用程序位于:


root.com/app1
root.com/app2


我们使用上面的方法创建了映射,以在app1中从app2中获取cfcs。尽管我认为有些奇怪,但该方法确实适用于我们所有的应用程序。

编辑:显示一段时间的正确的映射是:

/cfcs - D:\www\app1\assets\cfcs
/templates - D:\www\app1\assets\templates
/cas - D:\www\app2\assets\cfcs
/common - D:\www\app3\assets\common_elements


但是,一旦应用程序进入“崩溃模式”,转储将显示以下映射:

/cfcs - D:\www\app1\assets\cfcs
/templates - D:\www\app1\assets\templates
/cas - D:\www\app1\assets\cfcs
/common - D:\www\app1\assets\common_elements


这是在Application.cfc的开头定义这些映射的方式:

currpath = GetDirectoryFromPath(GetCurrentTemplatePath());
THIS.mappings["/templates"] = "#currpath#assets\templates";
THIS.mappings["/cfcs"] = "#currpath#assets\cfcs";
THIS.mappings["/common"] = "#ReplaceNoCase(currpath,ListToArray(THIS.name,'_')[1],'gum')#assets\common_elements\";
THIS.mappings["/cas"] = "#ReplaceNoCase(currpath,ListToArray(THIS.name,'_')[1],'cas30')#assets\cfcs\";


THIS.name = digisign_CAAAFACBFDFFE或

name_var = (arrayLen(meta_array) >= 2) ? meta_array[arrayLen(meta_array) - 1] & '_' : 'root_';
THIS.name = name_var & right(reReplace(hash(getCurrentTemplatePath()), "[^a-zA-Z]","","all"), 64 - len(name_var));


它可能在哪里失败。似乎replace语句不起作用,因此在设置映射时,路​​径中的appname不会从app1更改为app2。这是否可能与我们当前正在解决的错误有关: http://forums.adobe.com/message/4657868#4657868我们尚未在生产中应用Update 4补丁。但是,我们认为此问题是在CF10之前发生的。虽然我们遇到了这个问题,但直到最近才出现。该应用程序已经崩溃了很长时间了。

编辑:
1.我想当我说“崩溃”时,我的意思是应用程序进入一种状态,直到重新启动Coldfusion之前,它不会正确声明映射。我认为代码中的错误会导致崩溃。
2.通常在检查SESSION.user var时出现问题。我相信它也发生了,它决定找不到我们的数据源。这是罕见的。
3.起初我以为是,但实际上不是,不是很多。在我们的应用程序中,我们为通用映射指定了多个名称。 cas common cfcs templates等。但是 D:\www\cas是应用程序 domain.com/cas30所在的位置。但是,该应用程序的旧版本位于 domain.com/cas。映射 /cas应该转到 D:\www\cas30\assets\cfcs并起作用。
4.我们有一个开发设置,这永远不会发生。 (我认为这是一个负载问题,这就是为什么它不会在开发人员中发生的原因)。但是,我们的开发环境是这样构造的:

D:\www\deva\app1
D:\www\deva\app2
D:\www\devb\app1
D:\www\devb\app2



我们要做的(我认为这很愚蠢)是我们有一个与当前应用程序不在同一目录中的文件。该文件称为application_base.cfc。其他应用程序中的所有application.cfcs都从此application_base.cfc扩展。它们不会从其他Application.cfc文件扩展。 (希望如此)在application_base中是一个init,onrequeststart和一个onerror。我将在下面发布App.cfc。此外,还从应用程序库(以确定环境的东西)和应用程序级别的XML文件中读取一些设置。但是,我们认为这可能是导致问题的原因,因此以前的开发人员在应用程序级别删除了xml文件。
6.是的我将发布app.cfc和appbase.cfc,以便您可以同时查看两者。
通过重新初始化,您的意思是在applicationstart上进行调用。从来没听说过。
我们有一些应用程序:

currpath = GetDirectoryFromPath(GetCurrentTemplatePath());
app_path = ListToArray(currpath,'\');
THIS.name = app_path [ArrayLen(app_path)];


这个做:

meta_array = ListToArray(GetMetaData(this).name,'.');
name_var = (arrayLen(meta_array) >= 2) ? meta_array[arrayLen(meta_array) - 1] & '_' : 'root_';
THIS.name = name_var & right(reReplace(hash(getCurrentTemplatePath()), "[^a-zA-Z]","","all"), 64 - len(name_var));


其他一些人也这样做。不确定是两个不同的开发人员还是其他人,但这就是事实。

一旦应用程序失败,它将失败,直到我重新启动Coldfusion。该应用程序需要从 domain.com/app页面登录,因此(并不是说它不能随请求而更改),但是失败的位置始终是请求位置。

上帝,我希望这不是那么复杂。我最近从许多疯狂的东西中撤出了当前的CMS,但是我们有7或8个应用程序相互交织在一起,旨在在具有不同路径的dev / prod环境中工作,有时很难说出我可以删除的内容还有我做不到的

我以为我尝试过从错误处理程序中转储应用程序名称,但是我认为除非传入,否则它是行不通的。我通过了映射,这样我才能看到它们,这就是我知道 digisign不会更改为 cas30它应该处于“崩溃”模式。

我认为所有动态映射都是如此,因此原始开发人员可以使用相同的app.cfc模板而无需进行任何更改。他喜欢做没有注释的 var a = (b) ? (a-c) ? a-f+b : (a+b) ? d : d; : a; h;废话之类的东西,因此有时很难只阅读该死的代码,更不用说调试它了。

编辑

我觉得这个问题和 stackoverflow.com/q/14300915/1229594问题可能有关。我也在这里发布了更多详细信息: forums.adobe.com/message/5022377#5022377

最佳答案

第一件事:为什么要在onREQUESTStart()中初始化面向会话的内容?如果您在onSessionStart()中初始化了该请求,则无需检查每个请求的存在,尽管这很琐碎-但这是不必要的开销,并且在错误的位置只是错误的代码。

其次,您引用错误,但不说错误在哪里发生。它发生在onRequestStart()的那一行中吗?

如果是这样,请帮我一个忙:对其进行尝试/捕获,然后在其中将this.mappings的值和currPath的值写入日志文件。顺便说一句,如何得出该变量的值?

就是说,我认为,只要将session.user初始化代码放在正确的位置,它就能解决您的问题。

注意:将此问题归结为几乎肯定不是内存泄漏(例如:ColdFusion的错误),而是您的代码做了您未曾预料到的事情(所以……犯错……您的错误;-)。这将有助于更好地专注于发现问题。我没办法,但是“我的代码哪里出错了”比“可能还有其他问题”更好。而且更可能是正确的;-)

哦...那是什么版本的CF?

关于coldfusion - CF扩展组件突然停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14286891/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com