Sunday, November 22, 2015

CakePHP environment plugin doesn't work

I've made a CakePHP application and would like to integrate the environments concept. So my app should check the current domain name and then automatically determine if the environment is...

 1. Development: http://development.bellewaerdefun.be
 2. Staging: http://staging.bellewaerdefun.be
 3. Production: http://bellewaerdefun.be

After doing that, every environment should have it's own variables set. That's perfect to make a database connection without changing the variables when the development file is copied to staging and/or production.

So I decided to look for an existing environment plugin and I found this one:
https://github.com/josegonzalez/cakephp-environments

I manually copied and installed the needed folder and files, enabled the plugin in bootstrap.php and made a configuration file of every environment.

DEVELOPMENT

    <?php
   
   
Environment::configure('development',
    array
(
   
'server' => array('development.bellewaerdefun.be')
   
),
    array
(
           
// Site specific items
           
   
'Settings.FULL_BASE_URL' => 'http://development.bellewaerdefun.be',
   
   
'Email.username' => 'email@example.com',
   
'Email.password' => 'password',
   
'Email.test' => 'email@example.com',
   
'Email.from' => 'email@example.com',
   
   
'logQueries' => true,
           
           
// App Specific functions
           
   
'debug' => 2,
           
           
// Securty
           
   
'Cache.disable' => true,
   
'Security.salt' => 'SALT',
   
'Security.cipherSeed' => 'CIPHERSEED',
           
           
// Database
           
           
'MYSQL_DB_HOST' => 'localhost',
           
'MYSQL_USERNAME' => 'root',
           
'MYSQL_PASSWORD' => '',
           
'MYSQL_DB_NAME' => 'blwfun',
           
'MYSQL_PREFIX' => ''
   
),
   
function() {
   
if (!defined('FULL_BASE_URL')) {
    define
('FULL_BASE_URL', Configure::read('Settings.FULL_BASE_URL'));
   
}
   
}
   
);
   
?>


STAGING

    <?php
   
   
Environment::configure('production',
    array
(
   
'server' => array('bellewaerdefun.be')
   
),
    array
(
           
// Site specific items
           
   
'Settings.FULL_BASE_URL' => 'http://bellewaerdefun.be',
   
   
// Email settings (maybe deprecated in 2.x)
   
'Email.username' => 'email@example.com',
   
'Email.password' => 'password',
   
'Email.test' => 'email@example.com',
   
'Email.from' => 'email@example.com',
   
   
// App Specific functions
           
   
'debug' => 0,
   
   
// Securty
   
'Security.level' => 'medium',
   
'Security.salt' => 'SALT',
   
'Security.cipherSeed' => 'CIPHERSEED',
           
           
// Database
           
           
'MYSQL_DB_HOST' => 'localhost',
           
'MYSQL_USERNAME' => 'xxx',
           
'MYSQL_PASSWORD' => 'xxx',
           
'MYSQL_DB_NAME' => 'xxx',
           
'MYSQL_PREFIX' => ''
   
)
   
};
   
?>


After doing all of that, I thought my application would now automatically check the environment, but guess what: it doesn't! It keeps returning the default "development" environment. That's what happens in the Environment class (Plugin > Environments > Lib > Environment.php):

    class Environment {
   
   
public $environments = array();
   
   
protected static $_instance;
   
   
protected $_configMap = array(
   
'security' => 'Security.level'
   
);
   
   
public static function &getInstance() {
   
if (! self::$_instance) {
    $Environment
= 'Environment';
   
if (config('app_environment')) {
    $Environment
= 'App' . $Environment;
   
}
   
   
self::$_instance = new $Environment();
   
Configure::write('Environment.initialized', true);
   
}
   
   
return self::$_instance;
   
}
   
   
public static function configure($name, $params, $config = null, $callable = null) {
    $_this
= Environment::getInstance();
    $_this
->environments[$name] = compact('name', 'params', 'config', 'callable');
   
}
   
   
public static function start($environment = null, $default = 'development') {
    $_this
=& Environment::getInstance();
   
return $_this->setup($environment, $default);
   
}
   
...


Is there anyone who has the same problem as I have with this plugin? Or anyone who has a good solution to make my environments work?

Thanks a lot!

Additional info:
CakePHP version = 2.7.3
PHP version = 5.3.8

--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

---
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cake-php+unsubscribe@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.

No comments: