Search code examples
zend-framework.htaccessworkflowdreamhost

Best Practice for Environment Variable Management


I'm developing a Zend MVC on my local machine, and am using a DreamHost site for staging. As per the zend quick start, on my local machine I set my APPLICATION_ENV to development from within a .htaccess file in the public directory of the project, like this:

myproject/public/.htaccess contains this line,

"SetEnv APPLICATION_ENV development"

This works just fine locally. But when I try to use my app_env in my staging server it's not there to use. This thread suggested that perhaps suexec was running in the background. I did some digging and sure enough, Dreamhost blocks custom environment variables.

I tried the first workaround that DH suggested, by prepending "HTTP_" to "APPLICATION_ENV", and then adding another conditional within public/index.php to check for both the original and the dreamhost version.

// Define application environment
defined('APPLICATION_ENV') || define('APPLICATION_ENV', 
  (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 
  (getenv('HTTP_APPLICATION_ENV') ? getenv('HTTP_APPLICATION_ENV') : 'production')));

This didn't seem to work for me. Even in ssh, when I run 'env' in the command line, my application_env isn't listed. Since I'm not working with CGI script I didn't bother with the second and third workarounds.

tl;dr

So, as far as I understand it, my options are to either create my own config system (save app_env to a different file, load that file in public/index.php which seems like more work than it's worth considering option 2) or just 'hard' code the app_env into the default position - meaning, instead of 'production' in the code example above it would just say 'staging'. If I went with the latter, I'd have to .gitignore my public/index.php file, which just seems a little strange. Before this, I've never had to change that file and would assume that it's better if I don't mess with it, let alone completely leave it outside of my repository. Thoughts? Suggestions? Further workarounds?


Solution

  • I have experienced the same problem as you. However, it is not as big as it seems. Once index.php is set up it never changes, so it is safe to leave it out of version control.

    Hard code the the definition of APPLICATION_ENV on each of your dev, staging and production servers and forget about it.

    I have been developing with ZF for two years now and I can't remember the last time I made a change to index.php other than setting it up for each server and that is to change just 1 line.

    tl;dr Its not worth the effort to do other than hard coding APPLICATION_ENV in your situation.