Logo de Cecil Cecil
Sur cette page

Utiliser des réglages différents selon l’environnement

Le site local et le site de production partagent rarement les mêmes réglages : URL de base, mode debug, répertoire de sortie… Cecil permet de conserver un unique cecil.yml et de le surcharger selon l’environnement.

Garder les valeurs de production dans cecil.yml

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

Surcharger avec des fichiers de configuration supplémentaires

Créez un fichier contenant uniquement les clés à modifier, par exemple config/dev.yml :

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

Puis chargez-le avec l’option --config, disponible avec les commandes build et serve :

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

Vous pouvez passer plusieurs fichiers, séparés par des virgules. Ils sont fusionnés dans l’ordre après cecil.yml : chaque fichier surcharge donc les précédents.

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

Surcharger avec des variables d’environnement

Toute clé de configuration peut être définie par une variable d’environnement préfixée par CECIL_, en majuscules. Les clés imbriquées sont séparées par un underscore (par exemple CECIL_OUTPUT_DIR définit output.dir) :

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

Cecil charge aussi un fichier .env à la racine du site, s’il existe (les variables déjà définies par le système sont conservées) :

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

Les variables d’environnement sont appliquées par-dessus les fichiers de configuration, ce qui les rend pratiques en CI, par exemple :

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

Lire l’environnement dans les templates

Utilisez la fonction getenv pour adapter les templates, par exemple pour n’inclure les statistiques d’audience qu’en production :

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

La variable site.debug indique si le mode debug est activé :

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