2010-02-11 3 views
9

Sviluppo applicazioni coldFusion sul mio laptop con il proprio server ColdFusion 8 con IIS eseguito su Windows Vista. Sto avendo un problema piuttosto fastidioso.ColdCusion Server Ccn Caching Issue

Il problema si presenta ogni volta che apporto delle modifiche ai miei CFC, a meno che non riavvii il server ColdFusion Application, le modifiche ai miei CFC non diventeranno effettive. Spesso, devo riavviare l'intera macchina perché Windows non può riavviare il servizio ColdFusion Application Server. C'è un modo migliore per ripristinare la cache di cfc di ColdFusion Server?

Questo sta iniziando a risucchiare un sacco di tempo solo dover ricominciare ogni tanto dopo aver apportato una modifica. Qualsiasi intuizione sarebbe molto apprezzata!

Grazie!

+0

Sono nella portata dell'applicazione? Hai anche selezionato "Salva file di classe" in Impostazioni server> Cache? – kevink

+0

Stai salvandoli in qualsiasi ambito persistente? Sessione/server/etc.? –

+0

Controlla Ammin> Dati e servizi> Servizi Web e verifica se i cfcs si registrano come servizi Web, in tal caso eliminali da tale schermata e verifica se ciò è di aiuto. – kevink

risposta

9

Garantisco che vengono creati come oggetti in una sorta di ambito persistente, ad esempio: applicazioni, ambiti di sessione. Quello che generalmente faccio per evitare questo problema durante lo sviluppo è creare un parametro url e verificarlo nel file application.cfm/cfc (o ovunque si stiano creando gli oggetti) e ricreare gli oggetti se viene rilevato quel parametro url.

Esempio:

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

naturalmente si avrebbe bisogno di fare questo con ogni oggetto che si stanno avendo un problema con.

+0

questo mi ha dato mal di testa per così tanto tempo, non mi sono reso conto che mettere qualcosa in ambito di applicazione effettivamente salva il codice, ho pensato che sarebbe stato sufficiente salvare i metadati dell'oggetto. – Kip

1

Non sono sicuro che sia presente anche in altre versioni di CF, ma in CF9 è possibile eseguire ApplicationStop() e resetterà l'applicazione CFA e la ricaricherà.

+0

Questo è esattamente ciò di cui ho bisogno! Ma sto eseguendo CF8. Non è supportato in questa versione :( – GavinWoods

0

Nel tuo Amministratore Coldfusion, hai attivato una delle seguenti opzioni (selezionata)?

Caching> Trusted Cache

file di classe Caching> Salva

+0

Nessuno di questi è abilitato – GavinWoods

0

solo chiedendo l'ovvio: Stai chiamando queste funzioni da onApplicationStart?

+0

No, le funzioni non vengono chiamate suApplicationStart. – GavinWoods

0

Forse prova il pulsante "Cancella modello cache" in CF Admin> Caching.

Questo mi è successo prima. Di solito devo fare clic sul pulsante più volte per registrare i file modificati.

Potrebbe anche provare a deselezionare tutto in Caching. Nota: esegui questa operazione solo per le macchine di sviluppo !!!

+0

Grazie per la risposta, l'ho provato ma non ha funzionato Questo ha funzionato solo in genere per i miei file .cfm in Ho provato a abilitare poi disabilitare anche le opzioni della cache, nessuna gioia :(. Sembra quasi che debba essere una costante seccatura di riavvio del server delle applicazioni CF fino a quando la mia azienda non deciderà di aggiornare a CF9 o successivo – GavinWoods

0

Se è necessario disporre di memorizzazione nella cache in dev, si potrebbe fare quello che faccio:

In primo luogo mettere un assegno per una bandiera URL alla parte superiore del vostro metodo di onRequest() che chiamerà il metodo 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> 

Questo risolverà la maggior parte dei vostri problemi. Tuttavia, se hai un problema in una classe che stai caricando, non sarà abbastanza lontano da controllare questo flag.La soluzione che uso per questo:

Aggiungere il seguente alla bottome del onError() metodo:

<cfif IsDefined("APPLICATION")> 
     <cfset StructClear(APPLICATION) /> 
</cfif> 

Infine, si desidera controllare che esiste l'oggetto Application e che ogni classe si dichiara come parte dell'ambito APPLICAZIONE esiste o si desidera richiamare onApplicationStart(). Per fare questo, aggiungere il seguente proprio sotto il primo blocco di codice nella parte superiore di onRequestStart():

<cfif not IsDefined("APPLICATION") 
    OR not StructKeyExists(APPLICATION, "[ClassName1]") 
    OR not StructKeyExists(APPLICATION, "[ClassName2]") 
    ...> 
    <cfset onApplicationStart() /> 
</cfif> 
0

ho avuto lo stesso identico problema, a volte ho dovuto riavviare la macchina se le modifiche non rifletterebbero dopo avviare il server il gestore del servizio.

quello che faccio è, a (Administrator, Caching): 1. I incontrollato tutte le opzioni di cache 2. Ho impostato il valore della casella di testo a "0" 3. tengo la (Administrator, Caching) la pagina aperta quando lo sviluppo, in modo che quando carico una modifica e non riflette, ho appena colpito il "Cancella Template Cache Now".

Questo è ciò che funziona per me su CF8, Built In Web Server, XP.

0

"cache Componente" Uncheck in CFAdmin -> Caching

Verificare inoltre CFAdmin -> Mappature e assicurarsi che la cartella CFC punta a destra di una eventuale. A volte le persone clonano il loro codice sorgente e non cambiano il mapping nella nuova cartella.