12

我在笔记本电脑上使用自己的 ColdFusion 8 服务器和在 Windows Vista 上运行的 IIS 开发 ColdFusion 应用程序。我有一个相当烦人的问题。

问题是每当我对我的 CFC 进行任何更改时,似乎除非我重新启动我的 ColdFusion 应用程序服务器,否则对我的 CFC 的更改将不会生效,直到我这样做。很多时候,我不得不重新启动我的整台机器,因为 Windows 无法重新启动 ColdFusion Application Server 服务。有没有更好的方法来重置 ColdFusion 服务器的 cfc 缓存?

这开始占用很多时间,只是在我进行更改后不得不每隔一段时间重新启动一次。任何见解将不胜感激!

谢谢!

4

8 回答 8

10

我保证您将这些对象创建为某种持久范围内的对象,例如:应用程序、会话范围。我通常在开发过程中避免这个问题的做法是创建一个 url 参数并在 application.cfm/cfc 文件(或您创建对象的任何位置)中检查该参数,如果检测到该 url 参数,则重新创建对象。

例子:

<cfif NOT structKeyExists(application,"myObj") OR structKeyExists(url,"reinit")>
    <cfset application.myObj = createObject("component","path.to.cfc") />
</cfif>

当然,您需要对遇到问题的每个对象执行此操作。

于 2010-02-18T18:54:17.867 回答
1

我不确定这是否也在其他版本的 CF 中,但在 CF9 中,您可以执行 ApplicationStop(),它会重置 CFApplication 并重新加载它。

于 2010-02-11T21:58:05.610 回答
1

取消选中 CFAdmin 中的“组件缓存”-> 缓存

还要检查 CFAdmin --> Mappings 并确保 CFC 文件夹指向正确的文件夹(如果有)。有时人们克隆他们的源代码并且不将映射更改为新文件夹。

于 2013-04-11T13:54:24.903 回答
0

在您的 Coldfusion Administrator 中,您是否启用(选中)了以下任何一项?

缓存 > 可信缓存

缓存 > 保存类文件

于 2010-02-11T23:21:56.103 回答
0

只是问一个显而易见的问题:您是从 onApplicationStart 调用这些函数吗?

于 2010-02-12T21:31:45.153 回答
0

也许尝试 CF Admin > Caching 下的“Clear template cache”按钮。

这以前发生在我身上。我通常必须多次单击按钮才能 CF 注册更改的文件。

也可以尝试取消选中缓存下的所有内容。注意:仅对开发机器执行此操作!!!

于 2010-02-15T17:04:08.523 回答
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>
于 2010-03-04T18:36:46.763 回答
0

我遇到了完全相同的问题,有时如果在启动服务器服务管理器后更改没有反映出来,我不得不重新启动机器。

我所做的是,在(管理员,缓存)中: 1. 我取消选中所有缓存选项 2. 我将文本框值设置为“0” 3. 我在开发时保持(管理员,缓存)页面打开,这样当我上传更改并没有反映,我只是点击“立即清除模板缓存”。

这就是我在 CF8、内置 Web 服务器、XP 上的工作。

于 2010-04-28T12:35:27.007 回答