codekiln
codekiln

Reputation: 3720

Force coldfusion 8 to reload component cache?

ColdFusion 8 is caching my cfcs. Development is at a stand-still. I don't have access to the admin panel. What are my options?

Upvotes: 1

Views: 2077

Answers (3)

Scott Jibben
Scott Jibben

Reputation: 2287

I know that this post is old, but I needed to do this for a (more) modern version of ColdFusion (2016) and the answer from Peter wouldn't work on CF 2016. Not looking to be the answer, just a footnote for newer versions of CF.

Here is a version that will work with 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 appears to have separated the CF admin functionality from the runtime component. That's really the only difference. The version above shows how to clear the component cache too.

NOTE: I had been doing something very similar to CFNinja's answer, but one site (out of about 25 similar sites) just wouldn't clear the application scope components, the old version remained in a cache somehow.

Upvotes: 1

Kung Fu Ninja
Kung Fu Ninja

Reputation: 3752

I use application.cfc to clear all of the cfc cache.

    <!--- *****************************************************************
      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>

The idea is to pass a url variable called "reinit". Whenever this variable is defined in the URL, the application is started.

In order to test this: 1. make a change to cfc 2. call a cfm page by xxx.cfm?reinit=1 3. observe the changes in the cfc are reflected.

hope it helps...

Upvotes: -1

Peter Boughton
Peter Boughton

Reputation: 112240

1) Get access to CF Administrator.

Really. I wouldn't want to host anywhere where I didn't have control over this.

2) Programmatically clear the cache.

Using the Admin API:

createObject("component","cfide.adminapi.runtime").clearTrustedCache()

Of course, if you don't have access to the CFAdmin, you might not have access to this either, but is worth trying.

According to this blog entry from Ray Camden you'll need to login to the admin via the API before running the above command, which of course suggests it's not going to work without already having access.

<cfset API = createObject("component","cfide.adminapi.runtime") />
<cfset API.login(adminPassword="password") />
<cfset API.clearTrustedCache() />

Upvotes: 1

Related Questions