2013-03-20 5 views
3

누구든지이 문제를 설명 할 수 있습니까? onApplicationStart에 여러 응용 프로그램 범위 설정을 설정했으며 그 중 일부는 onSessionStart에 참조되었습니다. 그러나 ORM을 활성화하면 onApplicationStart가 전혀 실행되지 않아 내 onSessionStart 메서드가 실패하는 것 같습니다.ColdFusion - 실행중인 응용 프로그램 시작에서 ORM을 사용 중지하면

이것이 문제라는 것을 알기까지 잠시 시간이 걸렸습니다. 일반적으로 개발 과정에서 프로그래밍 방식으로 onApplicationStart을 타격하여 테스트 할 것입니다. 그래서 서비스를 다시 시작한 후에야 증상을 발견했습니다. 결국 나는 다시 ORM에 그것을 추적과 같이 간단하다 : 나는 Application.cfc을 제거

THIS.ormenabled = true; // Error 
THIS.ormenabled = false; // Everything peachy 

내가 실행 된 것을 볼 수 있도록 다양한 방법에 약간의 타임 스탬프를 넣어 :

<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에서 광범위하게 테스트하지는 않았지만 초기 문제도 거기에서 발생했기 때문에 같은 원인이라고 생각합니다.

누구든지이 문제에 관해 밝힐 수 있습니까?

+0

당신은'cfscript' 대신'cfset'을 사용해 보았고 여러분은'ormsettings' 구조를 제공하여 어떤 일이 일어나는지 보았습니까? 나는 그 중 어떤 것도 중요하다고 생각하지 않는다. 그러나 그것이 버그라면, 낯선 것들이 그것을 고칠 수있다. – Travis

+0

'application.cfc'의 다운 된 버전에서'sessionmanagement'가 활성화되어 있습니까? 이 예제에서는 그렇지 않습니다. – Travis

+0

스트립되지 않은 다운 버전에서는 세션 관리가 활성화되어 있습니다. 그래도 어느 쪽이라도 어떤 차이도없는 것처럼 보입니다. cfset으로 이동하여 ormsettings 구조체를 제공하려고했지만 아무 소용이 없었습니다. 그래도 고마워! –

답변

0

이 문제는 cfclocation 설정에 문제가 있음을 나타냅니다. 원래 앱에서 잘못된 위치를 가리키고있었습니다. 테스트를 위해 Application.cfc를 제거했을 때이 설정을 제거했습니다. 기본 동작은 영구 CFC를 찾기 위해 루트에서 폴더를 탐색하는 것입니다. 그런 다음 응용 프로그램이 onApplicationStart를 폭파 한 프로세스 중에 문제가 발생했지만 Application.cfc에서 다른 기능을 계속 실행 한 것처럼 보입니다.

Railo 그룹의 한 사람은 Hibernate 엔진에서 읽는 비 영구적 인 CFC에서 의사 생성자를 사용하는 데 문제가 있음을 확인했습니다. 나는 그것이이 문제에 기여했는지 확신 할 수는 없지만 가능성이 높습니다.

0

OnApplicationStart는 응용 프로그램이 메모리에 처음 생성 될 때만 실행되며 ApplicationStop()과 같이 명시 적으로 호출하지 않는 한 응용 프로그램의 수명 동안 한 번만 실행됩니다. 또는 메소드를 다시 호출하십시오. 또한, 설정 한 Application | 위의 변수는 하나의 요청 수명 동안 만 존재하는 요; 범위 변수입니다. onSessionStart와 마찬가지로, 요청 변수는 사용자 세션이 처음 생성 될 때만 존재합니다.

먼저 요청 : (ApplicationStart & SessionStart 화재)

struct: request 
application  {ts '2013-03-20 18:50:17'} 
cfdumpinited false 
pseudo {ts '2013-03-20 18:50:20'} 
session  {ts '2013-03-20 18:50:19'} 

struct: session 
cfid 5600 
cftoken  a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9 
session  {ts '2013-03-20 18:50:19'} 
sessionid TESTYMCTESTABLE_5600_a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9 
urltoken CFID=5600&CFTOKEN=a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9 

두 번째 요청 : (응용 프로그램/SessionStart하지 않음 화재)

struct: request 
cfdumpinited false 
pseudo {ts '2013-03-20 18:50:59'} 

struct: session 
cfid 5600 
cftoken  a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9 
session  {ts '2013-03-20 18:50:19'} 
sessionid TESTYMCTESTABLE_5600_a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9 
urltoken CFID=5600&CFTOKEN=a8bf96c34c2cac7a-68400880-E1E6-ACDF-3B204DBBCD9A04A9 

이 CF9에서 테스트되었다.

Application.cfm의

<cfcomponent> 
<cfscript> 
    this.Name = "TestyMcTestable"; 
    this.ormenabled = true; 
    this.datasource = 'cfartgallery'; 
    this.sessionManagement = true; 
</cfscript> 

<cfset request.pseudo = Now() /> 
<cfset sleep(1500)> 

<cffunction name="OnApplicationStart" access="public" returntype="boolean" output="false"> 
    <cfset request.application = Now() /> 
    <cfset session.application = Now() /> 
    <cfset sleep(1500)> 
    <!--- Return out. ---> 
    <cfreturn true /> 
</cffunction> 


<cffunction name="OnSessionStart" access="public" returntype="void" output="false"> 
    <cfset request.session = Now() /> 
    <cfset session.session = Now() /> 
    <cfset sleep(1500)> 
    <!--- Return out. ---> 
    <cfreturn /> 
</cffunction> 

<cffunction name="OnRequestStart"> 

</cffunction> 

</cfcomponent> 

당신이 OnRequestStart에 요청 변수를 넣어 또는 경우에, 그들은이 모든 시간이 될 것입니다. 희망이 도움이됩니다.

+0

각 요청에서 onApplicationStart가 실행되고 있는지 확인하기 위해 앱의 이름을 변경하고 있습니다 (또는 적어도 실행 중이라고 가정). 확실하게, 나는 CF 서비스를 다시 시작한 후에 테스트를했습니다. 설정에서 ORM을 활성화하면 첫 번째 요청에서도 onApplicationStart가 실행되지 않습니다. –

+0

ACF에서 복제 할 수 없습니다. 나는 Railo를 타고 당신이보고있는 것을 복제 할 수 있는지 알아볼 것입니다. – BKK