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 handledAnchor link for: 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 filesAnchor link for: 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 loadingAnchor link for: 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 environmentAnchor link for: setting the environment
ApacheAnchor link for: 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>
NginxAnchor link for: nginx
When using the shopware-with-nginx configuration:
set $shopware_env 'production';
AntAnchor link for: ant
$ SHOPWARE_ENV=dev ant build-unit
Shopware ConsoleAnchor link for: 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 globallyAnchor link for: 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