Blog

Brad Wood

October 25, 2012

Spread the word


Share your thoughts

One of the most common server configurations is to have a production server and then 1 or more development or testing servers.  The trick with your "lower" environments is you typically want different settings for logging, error messages, data sources, or outgoing E-mails.  Manually switching settings when you move code is sketchy at best and setting up deployment scripts can be more work than you're willing to take on.
 
Enter ColdBox Environment Control.  ColdBox makes it easy to have different settings for each environment.  In your configuration CFC, you have a configure() method that creates several structs of setting variables.  Let's consider these our default production values.  Next, all you do is create a method for each additional environment such as development(), stage(), etc.  ColdBox will automatically call the appropriate environment override and you can add, remove, or override settings for that environment as you see fit.
 
In the mock example below, you can see that the main production settings are in the configure() method.  The "environments" setting struct declares a list of regular expressions to match against the URL to determine the environment.  When not in production, the appropriate development() or stage() method will be called where it can override or add settings as it sees fit.
 
ColdBox.cfc
component {
 
    function configure() {
        coldbox = {
            setting1 = 'value1',
            setting2 = 'value2',
            setting3 = 'value3'
        };
 
        environments = {
            development = "^dev.,^local.",
            stage = "^stage.,^test."
        };
    }
    
    function development() {
        coldbox.setting1 = 'devValue';
        arrayAppend(interceptors, {class="coldbox.system.interceptors.ColdboxSidebar} );
    }
    
    function stage() {
        coldbox.setting1 = 'stageValue';
    }
}
 
 
P.S. Don't want to use URL to determine your environment?  No problem.  Instead of an environments struct in your config, create a method called detectEnvironment() and simply have it return a string corresponding with the correct environment for that server.  You can base off the machine name, IP address, or even the location of the code on the file system.  It's up to you!

Add Your Comment

(2)

Oct 25, 2012 10:58:35 UTC

by Peter Boughton

Since it's a regex matched against http_host, you need to escape the dot - i.e. development = "^dev\.,^local\.", (Otherwise the dot will match any char in the hostname, so a domain such as "device.com" would incorrectly be considered development.)

Oct 25, 2012 15:16:41 UTC

by Brad Wood

Peter, funny you mentioned that. I've used it that way for years and never noticed, but it occurred to me last night while I was typing this up that the period needed escaped. I left it that way to match the docs, but you have a very good point. I think the saving grace, is that most people have a limited number of host names pointed at their apps.

Recent Entries

Must-See Into the Box 2025 Sessions for CommandBox Users!

Must-See Into the Box 2025 Sessions for CommandBox Users!

Power Up your CommandBox experience and practices at Into the Box 2025

Want to get hands-on with the new CommandBox features or learn how others are pushing it to the next level? These are the must-see sessions at ITB 2025 if you're a CommandBox user:

Maria Jose Herrera
Maria Jose Herrera
April 21, 2025
Must-See ITB 2025 Sessions for TestBox Users!

Must-See ITB 2025 Sessions for TestBox Users!

Are you a fan of TestBox or looking to level up your testing game in 2025? Whether you're just getting started with unit testing or you're already building advanced specs for ColdBox and BoxLang apps, Into the Box 2025 has an exciting lineup tailored just for you. Into the Box 2025 has an exciting lineup tailored just for you. With the recent launch of TestBox 6.3.0 we have amazing new tools, features and tips and tricks to get your testing experience to the next level, review our sessions and test like a pro efficiently and easy!

From hands-on testing strategies to BoxLang innovations, here are the sessions you won’t want to miss this May — and why they matter to you as a TestBox user.

Maria Jose Herrera
Maria Jose Herrera
April 17, 2025
The Into the Box 2025 Agenda is LIVE and Done!

The Into the Box 2025 Agenda is LIVE and Done!

The wait is over! The official Into the Box 2025 agenda is now live — and it's packed with high-impact sessions designed for modern CFML and BoxLang developers. Whether you’re building APIs, modernizing legacy apps, diving into serverless, or exploring AI integrations, this is the conference you’ve been waiting for.

Here’s a look at what you can expect — categorized by key topics to help you plan your learning journey, there’s something for everyone covering modern CFML tools and BoxLang:

Maria Jose Herrera
Maria Jose Herrera
April 15, 2025