2009-07-23 3 views
5

Devo mantenere una variabile nella mia Applicazione. (Cfm | cfc) per impostare l'ambiente in cui l'applicazione viene attualmente eseguita, l'ambiente è (sviluppo | prova | produzione).Come impostare una variabile a livello di server in ColdFusion

Mi piacerebbe impostare una variabile di ambiente sul server stesso, in modo che possa leggere il suo valore in Application.cfm.

È possibile?

risposta

10

Il più semplice è impostare una variabile di ambiente del sistema operativo (a livello di sistema o per l'utente in cui ColdFusion è in esecuzione) e riavviare il servizio. La variabile è quindi disponibile nel campo di applicazione CGI:

<cfset EnvName = CGI.COLDFUSION_ENVIRONMENT> 
<cfoutput>#EnvName#</cfoutput> 

Si potrebbe anche usare le proprietà di sistema Java. Nel vostro amministratore ColdFusion, andare su "Impostazioni server/Java e JVM", e aggiungere qualcosa di simile ai "Argomenti JVM":

-Dcom.mycompany.environment=development

È quindi possibile richiedere tale valore in ColdFusion:

<cfset System = CreateObject("java", "java.lang.System")> 
<cfset EnvName = System.getProperty("com.mycompany.environment")> 
<cfoutput>#EnvName#</cfoutput> 

È necessario riavviare il servizio CF ogni volta che si apporta una modifica, ma il valore sembra piuttosto statico, quindi questo non dovrebbe essere un problema.

+0

yay, che funziona. grazie molto. btw, come fate questo tipo di separazione? – noobsaibot

+0

Felice di sentirlo funzionare. :) Cosa intendi per "separazione"? – Tomalak

+0

la separazione dei blocchi di codice che dovrebbero essere eseguiti solo su scatole di sviluppo/test/produzione. – noobsaibot

3

Utilizzando apache si potrebbe. Nella configurazione di Apache (httpd.conf) o il vostro virtualhost se avete il modulo Env caricato si può fare questo:

SetEnv APP_ENVIRONMENT DEVELOPMENT 

Poi da ColdFusion:

#cgi['APP_ENVIRONMENT']# 

Se si dump l'ambito CGI il valore non verrà mostrato, ma sarà presente se lo si invia.

+0

grazie per il suggerimento. non eseguo apache e non riesco a trovare l'impostazione in iis per fare quel tipo di cose:/ – noobsaibot

+0

questo post (da una ricerca google veloce) http://forums.iis.net/p/ 1146779/1858505.aspx suggerisce che è possibile in iis7 – Ian

+0

+1 per il suggerimento che non viene mostrato quando si esegue il dumping dell'ambito CGI! – Seybsen

0

Il mio primo pensiero sulla lettura della domanda è stato quello di impostare una variabile SERVER:

Ma allora il problema è, dove poter impostare questo?

In CF9 ci sarà un metodo onServerStart() per questo genere di cose.

+0

ma poi dovresti mantenerlo in ogni applicazione che hai, no? SETENV e l'opzione -D sono impostati sul * server stesso *. non ho idea di come avrei dovuto metterlo diverso :) – noobsaibot

+0

No, le vang con ambito SERVER sono disponibili per l'intero server ColdFusion. Potresti pensare all'ambito APPLICAZIONE. Rendendolo una variabile CGI è utile in quanto funziona anche su server applicativi. –