Cecil logo Cecil
What's on this page

Use different settings per environment

Your local site and your production site rarely share the same settings: base URL, debug mode, output directory… Cecil lets you keep a single cecil.yml and override it per environment.

Keep production values in cecil.yml

title: "My site"
baseurl: https://example.com/
debug: false

Override with extra config files

Create a file with only the keys to change, for example config/dev.yml:

baseurl: http://localhost:8000/
debug: true

Then load it with the --config option, available with the build and serve commands:

php cecil.phar serve --config=config/dev.yml

You can pass several files, separated by commas. They are merged in order after cecil.yml, so each file overrides the previous ones:

php cecil.phar build --config=config/prod.yml,config/local.yml

Override with environment variables

Any configuration key can be set with an environment variable prefixed with CECIL_, in uppercase. Nested keys are separated with an underscore (e.g. CECIL_OUTPUT_DIR sets output.dir):

export CECIL_BASEURL="https://staging.example.com/"
export CECIL_DEBUG=true
php cecil.phar build

Cecil also loads a .env file from the site root, if it exists (variables already defined by the system are preserved):

CECIL_BASEURL="http://localhost:8000/"
CECIL_DEBUG=true

Environment variables are applied on top of the configuration files, which makes them handy in CI, for example:

# .gitlab-ci.yml
pages:
  variables:
    CECIL_ENV: production
    CECIL_OUTPUT_DIR: public

Read the environment in templates

Use the getenv function to adapt templates, for example to include analytics in production only:

{% if getenv('CECIL_ENV') == 'production' %}
  {{ include('partials/analytics.html.twig') }}
{% endif %}

The site.debug variable tells you if debug mode is enabled:

{% if site.debug %}{{ dump(page) }}{% endif %}