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!
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 fichierparameters.yml.dist
aussi.
Le processus de déploiement sera donc beaucoup moins douloureux.