ColdFusion 8正在缓存我的cfcs。发展停滞不前。我无权访问管理面板。我有什么选择?
真的。我不想在任何我无法控制的地方进行托管。
使用管理API:
createObject("component","cfide.adminapi.runtime").clearTrustedCache()
当然,如果您没有访问CFAdmin的权限,也可能也没有访问权限,但是值得尝试。
根据this blog entry from Ray Camden,您需要在运行上述命令之前通过API登录到管理员,这当然表明如果没有访问权限,它将无法正常工作。
<cfset API = createObject("component","cfide.adminapi.runtime") />
<cfset API.login(adminPassword="password") />
<cfset API.clearTrustedCache() />
我使用application.cfc清除所有cfc缓存。
<!--- *****************************************************************
Run before the request is processed
************************************************************--->
<cffunction name="onRequestStart" returnType="boolean" output="false">
<cfargument name="thePage" type="string" required="true">
<cfscript>
if (structKeyExists(url,'reinit')) {
structClear(application);
structClear(session);
onApplicationStart();
onSessionStart();
}
</cfscript>
<cfreturn true>
</cffunction>
想法是传递一个名为“ reinit”的url变量。只要在URL中定义了此变量,就会启动应用程序。
为了测试此:1.对cfc进行更改2.通过xxx.cfm?reinit = 1调用cfm页面3.观察cfc中的更改是否得到反映。
希望有帮助...
[我知道这篇文章很旧,但是我需要针对(更现代的)ColdFusion(2016)进行此操作,而Peter的答案在CF 2016上将不起作用。不希望成为答案,只是一个CF的较新版本的脚注。
这里是将与CF 2016一起使用的版本:
<cfscript>
variables['adminPW'] = "my cf admin password";
cfAdminAPIAdmin = createObject("component", "cfide.adminapi.administrator");
cfAdminAPIAdmin.login(variables.adminPW);
cfAdminAPIRuntime = createObject("component", "cfide.adminapi.runtime");
// clear the component and trusted (template) caches
cfAdminAPIRuntime.clearComponentCache();
cfAdminAPIRuntime.clearTrustedCache();
</cfscript>
Adobe似乎已将CF管理员功能与运行时组件分开。那确实是唯一的区别。上面的版本也显示了如何清除组件缓存。
[注意:我所做的事情与CFNinja的回答非常相似,但是一个站点(大约25个类似站点中)只是不会清除应用程序范围组件,而旧版本仍以某种方式保留在缓存中。