web-dev-qa-db-fra.com

Symfony2: Vous avez demandé un paramètre inexistant

J'ai vérifié des questions similaires sur SO, mais elles n'ont pas résolu mon problème.

Je déploie une application Symfony2 sur Openshift. Cela fonctionne bien sur mon ordinateur portable Windows 10, mais j'obtiens ce qui suit message d'erreur sur Openshift:

Fatal error: Uncaught exception 'Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException'
with message 'You have requested a non-existent parameter "database_path".
Did you mean one of these: "database_Host", "database_port", "database_name", "database_user"?'
in /var/lib/openshift/55eed4837628e1199f0000bb/app-root/runtime/repo/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php:106 Stack trace: #0 
/var/lib/openshift/55eed4837628e1199f0000bb/app-root/runtime/repo/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php(248):
Symfony\Component\DependencyInjection\ParameterBag\ParameterBag->get('database_path') #1 [internal function]:
Symfony\Component\DependencyInjection\ParameterBag\ParameterBag->Symfony\Component\DependencyInjection\ParameterBag\{closure}(Array) #2
/var/lib/openshift/55eed4837628e1199f0000bb/app-root/runtime/repo/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php in
/var/lib/openshift/55eed4837628e1199f0000bb/app-root/runtime/repo/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php on line 106

Ma config.yml est:

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }
...

doctrine:
    dbal:
        driver:   pdo_sqlite
        charset:  UTF8
        path:     "%kernel.root_dir%/../%database_path%"
...

Ma parameters.yml est:

parameters:
    database_driver: pdo_sqlite
    database_Host: localhost
    database_port: null
    database_name: demo.db
    database_user: root
    database_password: null
    database_path: /data/demo.db
    ...

et mon config_prod.yml est:

imports:
    - { resource: config.yml }
...

Qu'est-ce que je fais mal?

Mise à jour

J'ai changé mon config.yml à:

path:     "%kernel.root_dir%/../data/demo.db"

et le problème a disparu, mais je ne sais pas pourquoi!

11

C'est une erreur courante.

Tout comme je l'ai commenté ci-dessus:
Lors de l'exécution de composer install, symfony régénérera un nouveau parameters.yml fichier basé sur parameters.yml.dist (si seulement).
C'est donc une bonne idée de toujours vérifier si parameters.yml généré par symfony (lors de l'événement post-installation, composer) est correct.

Aussi:

Chaque fois que vous mettez à jour le parameters.yml fichier (avec des configurations qui devraient également être dans le serveur prod), vous devez mettre à jour le fichier parameters.yml.dist aussi.

Le processus de déploiement sera donc beaucoup moins douloureux.

36
felipsmartins