我在笔记本电脑上使用自己的ColdFusion 8服务器开发了coldFusion应用程序,该服务器在Windows Vista上运行。我有一个相当讨厌的问题。
问题是每当我对我的CFC进行任何更改时,除非我重新启动我的ColdFusion应用程序服务器,否则对我的CFC的更改将不会生效,除非我这样做。通常,我必须重新启动整个计算机,因为Windows无法重新启动ColdFusion Application Server服务。有没有更好的方法来重置ColdFusion服务器的cfc缓存?
我开始耗费大量时间,因为我必须经常在我做出改变后重新开始。任何见解将不胜感激!
谢谢!
答案 0 :(得分:9)
我保证你在某种持久范围内创建这些对象,例如:应用程序,会话范围。我通常在开发过程中避免此问题的方法是创建一个url参数并在application.cfm / cfc文件中(或者在创建对象的任何位置)检查它,并在检测到url参数时重新创建对象。
示例:
<cfif NOT structKeyExists(application,"myObj") OR structKeyExists(url,"reinit")>
<cfset application.myObj = createObject("component","path.to.cfc") />
</cfif>
当然,您需要对遇到问题的每个对象执行此操作。
答案 1 :(得分:1)
我不确定这是否在其他版本的CF中,但在CF9中你可以执行ApplicationStop(),它将重置CFApplication并重新加载它。
答案 2 :(得分:1)
取消选中CFAdmin中的“组件缓存” - &gt;缓存
同时检查CFAdmin - &gt;映射并确保CFC文件夹指向正确的文件夹(如果有)。有时候人们克隆他们的源代码并且不会将映射更改为新文件夹。
答案 3 :(得分:0)
在Coldfusion管理员中,您是否启用了以下任一项(已选中)?
缓存&gt;可信缓存
缓存&gt;保存类文件
答案 4 :(得分:0)
只是问明显: 你是从onApplicationStart调用这些函数吗?
答案 5 :(得分:0)
也许在CF Admin&gt;下尝试“清除模板缓存”按钮缓存。
之前发生在我身上。我通常需要多次单击该按钮才能注册更改的文件。
也可以尝试取消选中缓存下的所有内容。注意:只对开发机器这样做!!!
答案 6 :(得分:0)
如果你必须在dev中进行缓存,你可以做我做的事情:
首先检查onRequest()方法顶部的URL标志,该方法将调用onApplicationStart()方法:
<cfif IsDefined("URL.dev")>
<cflock timeout="5" scope="Session" type="Exclusive">
<cfif URL.dev EQ true>
<cfset SESSION.debug = true />
<cfelse>
<cfset StructDelete(SESSION, "debug") />
</cfif>
</cflock>
</cfif>
<cflock timeout="5" scope="Session" type="Readonly">
<cfif IsDefined("URL.appreset") or IsDefined("SESSION.dev")>
<cfset StructClear(SESSION) />
<cfset onApplicationStart() />
</cfif>
</cflock>
这将解决您的大部分问题。但是,如果您正在加载的类中存在问题,则检查此标志将不够。我用它的解决方案:
将以下内容添加到onError()方法的底部:
<cfif IsDefined("APPLICATION")>
<cfset StructClear(APPLICATION) />
</cfif>
最后,您要检查APPLICATION对象是否存在,以及您作为APPLICATION范围的一部分声明的每个类是否存在,或者您想要调用onApplicationStart()。为此,请在onRequestStart()顶部的第一个代码块下面添加以下内容:
<cfif not IsDefined("APPLICATION")
OR not StructKeyExists(APPLICATION, "[ClassName1]")
OR not StructKeyExists(APPLICATION, "[ClassName2]")
...>
<cfset onApplicationStart() />
</cfif>
答案 7 :(得分:0)
我遇到了完全相同的问题,如果在启动服务器服务管理器后没有反映出更改,有时我不得不重启机器。
我所做的是(管理员,缓存): 1.我取消选中所有缓存选项 2.我将文本框值设置为“0” 3.我在开发时保持(管理员,缓存)页面处于打开状态,这样当我上传更改并且没有反映时,我只需点击“立即清除模板缓存”。
这就是我在CF8,内置Web服务器,XP上的工作。