Shopware is able to handle multiple environments using the SHOPWARE_ENV
environment variable.
This can be used to load different config files and to separate cache files.
How the environment is handled
This environment variable is picked by shopware.php
and bin/console
and then propagated to the kernel:
$environment = getenv('SHOPWARE_ENV') ?: 'production';
$kernel = new Kernel($environment);
As you can see, if no environment is given, production
is used as the default.
Generated files
The environment is taken into account for the cache directories and log files.
Running Shopware with each of the environments dev
, production
and testing
will result in the following directory tree:
var
├── cache
│ ├── dev_201601120732/[...]
│ ├── production_201601120732/[...]
│ └── testing_201601120732/[...]
└── log
├── core_dev-2016-01-25.log
├── core_dev-2016-01-26.log
├── core_dev-2016-01-27.log
├── core_production-2016-01-25.log
├── core_production-2016-01-26.log
├── core_production-2016-01-27.log
├── core_testing-2016-01-25.log
├── core_testing-2016-01-26.log
└── core_testing-2016-01-27.log
Config loading
The config loading order is defined in engine/Shopware/Configs/Default.php.
The config loader looks for a file named config_[ENVIRONMENT].php
first. If that file does not exists it falls back to config.php
.
On my development machine all my installations contain a file named config_dev.php
.
This configuration is usually optimized for development, increases error verbosity and disables some caches etc.
<?php
$defaultConfig = require 'config.php'; // config generated by ant build-unit
return [
'db' => $defaultConfig['db'],
'errorHandler' => [
'throwOnRecoverableError' => true,
],
'front' => [
'showException' => true,
],
'model' => [
'cacheProvider' => 'array'
],
]
Setting the environment
Apache
You can set the environment for your local installation using the .htaccess
:
SetEnv SHOPWARE_ENV dev
This also can be done conditionally for a specific Host or Subshop:
SetEnvIf Host "dev.shopware.in" SHOPWARE_ENV=dev
On my local development machine I configured it in the Apache vhost configuration for all installations:
<VirtualHost *:80>
DocumentRoot "/home/bcremer/www/"
SetEnv SHOPWARE_ENV dev
</VirtualHost>
Nginx
When using the shopware-with-nginx configuration:
set $shopware_env 'production';
Ant
$ SHOPWARE_ENV=dev ant build-unit
Shopware Console
This also works for the Shopware Console Commands:
$ SHOPWARE_ENV=dev ./bin/console sw:generate:attributes
Alternatively you can also use the --env
option that exists for every console command:
$ ./bin/console sw:generate:attributes --env=dev
Export environment globally
You can also go so far and set the SHOPWARE_ENV
environment variable globally for you shell:
# File: $HOME/.profile
export SHOPWARE_ENV=dev