谁能向我解释这种行为?我在 中设置了一堆应用程序范围的设置onApplicationStart
,其中一些在onSessionStart
. 但是,当我启用 ORM 时,似乎 onApplicationStart 根本没有运行,因此我的 onSessionStart 方法失败了。
我花了一段时间才弄清楚这是问题所在,通常我会onApplicationStart
在开发过程中以编程方式进行测试。所以只有在重新启动服务后我才发现症状。最终我将其追溯到 ORM,它很简单:
THIS.ormenabled = true; // Error
THIS.ormenabled = false; // Everything peachy
我剥离了 Application.cfc 并在各种方法中添加了一些时间戳,以便我可以看到正在执行的内容:
<cfscript>
THIS.Name = "TestyMcTestable"
THIS.datasource = 'Test';
THIS.ormenabled = true;
</cfscript>
<cfsetting
requesttimeout="20"
showdebugoutput="false"
enablecfoutputonly="false"
/>
<cfset request.pseudo = Now() />
<cfset sleep(1500)>
<cffunction name="OnApplicationStart" access="public" returntype="boolean" output="false">
<cfset request.application = Now() />
<cfset sleep(1500)>
<!--- Return out. --->
<cfreturn true />
</cffunction>
<cffunction name="OnSessionStart" access="public" returntype="void" output="false">
<cfset request.session = Now() />
<cfset sleep(1500)>
<!--- Return out. --->
<cfreturn />
</cffunction>
<cffunction name="OnRequestStart" access="public" returntype="boolean" output="false">
<cfargument name="TargetPage" type="string" required="true" />
<cfset request.requeststart = Now() />
<cfset sleep(1500)>
<!--- Return out. --->
<cfreturn true />
</cffunction>
<cffunction name="OnRequest" access="public" returntype="void" output="true">
<cfargument name="TargetPage" type="string" required="true" />
<cfset request.request = Now() />
<cfset sleep(1500)>
<!--- Include the requested page. --->
<cfinclude template="#ARGUMENTS.TargetPage#" />
<!--- Return out. --->
<cfreturn />
</cffunction>
我的 index.cfm 只包含请求范围的转储。如果我删除 orm 设置,一切都会按预期返回。但是,通过那里的设置,应用程序启动时设置的变量完全丢失,似乎 onApplicationStart 根本没有运行。
我正在通过更改请求之间的应用程序名称进行测试,但只是为了确定我也重新启动了服务。
我错过了什么吗?这是记录在案的行为吗?我在 Railo 上运行它——我没有在 ACF 上进行过广泛的测试,但最初的问题也发生在那里,所以我认为它是相同的原因。
任何人都可以对此有所了解吗?