2009-07-23 7 views
5

Je dois gérer une variable dans mon application. (Cfm | cfc) pour définir l'environnement dans lequel l'application s'exécute actuellement, l'environnement étant (développement | test | production).Comment définir une variable à l'échelle du serveur dans ColdFusion

Je voudrais définir une variable d'environnement sur le serveur lui-même, afin que je puisse lire sa valeur dans le fichier Application.cfm.

Est-ce possible?

Répondre

10

Le plus simple est de définir une variable d'environnement du système d'exploitation (au niveau du système, ou pour l'utilisateur ColdFusion s'exécute sous) et de redémarrer le service. La variable est alors disponible dans la portée CGI:

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

Vous pouvez également utiliser les propriétés du système Java. Dans votre ColdFusion Administrator, allez dans "Paramètres du serveur/Java et JVM", et d'ajouter quelque chose comme ceci à la "Arguments JVM":

-Dcom.mycompany.environment=development

Vous pouvez alors demander cette valeur dans ColdFusion:

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

Vous devez redémarrer le service CF chaque fois que vous apportez une modification, mais la valeur semble assez statique, cela ne devrait donc pas poser de problème.

+0

yay, ça marche. Merci beaucoup. BTW, comment faites-vous les gars ce genre de séparation? – noobsaibot

+0

Content de l'entendre fonctionner. :) Qu'entendez-vous par "séparation"? – Tomalak

+0

la séparation des blocs de code qui devraient être exécutés uniquement sur les boîtes de dev/test/production. – noobsaibot

3

En utilisant Apache vous pourriez. Dans la configuration apache (httpd.conf) ou votre VirtualHost si vous avez le module Env chargé, vous pouvez le faire:

SetEnv APP_ENVIRONMENT DEVELOPMENT 

Puis de ColdFusion:

#cgi['APP_ENVIRONMENT']# 

Si vous videz le champ CGI la valeur ne s'affichera pas, mais, il sera là si vous le produisez.

+0

merci pour le conseil. Je ne cours pas apache et ne semble pas pouvoir trouver le réglage dans iis pour faire ce genre de choses:/ – noobsaibot

+0

ce message (d'une recherche google rapide) http://forums.iis.net/p/ 1146779/1858505.aspx suggère qu'il est possible dans iis7 – Ian

+0

+1 pour l'indice qu'il n'est pas montré lors du dumping de la portée CGI! – Seybsen

0

Ma première pensée à la lecture de la question était de définir une variable SERVER:

Mais le problème est, où mettre cela?

Dans CF9, il y aura une méthode onServerStart() pour ce genre de chose.

+0

mais alors vous devrez maintenir cela dans chaque application que vous avez, n'est-ce pas? SETENV et l'option -D sont définis sur le * serveur lui-même *. je ne sais pas comment j'aurais dû le mettre différent :) – noobsaibot

+0

Non, les vars SERVER sont disponibles pour l'ensemble de votre serveur ColdFusion. Vous pensez peut-être à la portée APPLICATION. L'utilisation d'une variable CGI est pratique car elle fonctionnera également sur les serveurs d'applications. –

Questions connexes