Commandes de bases
Voici les commandes de base afin de déployer votre APP Symfony sur Heroku :
1 2 3 4 5 6 7 |
$ git add . $ composer install --no-dev --optimize-autoloader $ git commit -m "initial commit" $ heroku create $ heroku config:set SYMFONY_ENV=prod $ git push heroku master $ heroku open |
Si tout se passe bien, l’app sera fonctionnelle et affichée dans votre navigateur.
Les probabilités d’erreurs sont tout de même élevées. Débutons par configurer notre log convenablement et ensuite, nous verrons quelques combinaisons de problème et solutions possibles.
Configuration des LOGS
Afin d’avoir accès au LOG de votre application en temps réel, directement dans votre terminal, quelques modification doivent être apportés à votre fichier config_prod.yml.
1 2 3 4 5 6 |
monolog: handlers: nested: type: stream path: "php://stderr" level: debug |
Une fois la modification poussée sur Heroku,
1 2 3 |
$git add . $git commit -m "Updated LOG setting for Heroku" $ git push heroku master |
Vous pouvez lancer la commande suivante qui vous permettra de voir les logs défilés dans votre terminal :
1 |
$ heroku logs --tail |
Vous pourrez ainsi voir les erreurs directement dans votre terminal :
Problèmes rencontrés
Type de projet mal détecté
Avertissement
1 2 3 4 5 |
remote: -----> Warning: Multiple default buildpacks reported the ability to handle this app. The first buildpack in the list below will be used. remote: Detected buildpacks: Node.js, PHP |
Solution
Définir le type de projet avec la command buildpacks:set :
1 |
$ heroku buildpacks:set heroku/php |
Erreur lors de la configuration de votre application Heroku
Fatal error: Class not found
Solution
Lorsqu’une dépendance n’est pas installée correctement suite à la commande composer install (lancée automatiquement par Heroku). Vous aurez l’erreur Class not found. Prenez le temps de vérifier le bundle problématique. Vérifier que le bundle apparaît bien dans votre fichier composer.json et composer.lock. Vérifier aussi les dépendances chargées dans votre fichier AppKernel.php.
Autre piste de solution
If you get a « class not found » error during this step, you may need to run export SYMFONY_ENV=prod
before running this command so that the post-install-cmd
scripts run in the prod
environment.
Call to undefined function mb_convert_case
Problème
L’extension mbstring n’est pas chargée.
Solution
Dans le cas de l’erreur précédente, Symfony ne trouve pas l’extension mbstring (support utf8). La solution est simple. Ajouter la ligne « ext-mbstring »: « * » dans la section require de votre fichier composer.json :
1 2 3 |
"require": { "ext-mbstring": "*" } |
Finalement, pousser le code sur Heroku :
1 2 3 4 |
$ git add . $ git commit -m "Updated composer.json dependency" $ composer install --no-dev --optimize-autoloader $ git push heroku master |
–no-dev –optimize-autoloader
Il est conseillé de lancer composer avec les options –no-dev –optimize-autoloader :
1 |
$ composer install --no-dev --optimize-autoloader |
- The
--optimize-autoloader
flag improves Composer’s autoloader performance significantly by building a « class map ». - The
--no-dev
flag ensures that development packages are not installed in the production environment.
Application Symfony déployée avec succès
Lorsque tout fonctionne bien, on vous affichera un beau message de succès :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
remote: Heroku deploy detected creating default Procfile for "web" dyno remote: -----> Preparing runtime environment... remote: -----> Checking for additional extensions to install... remote: -----> Discovering process types remote: Procfile declares types -> web remote: -----> Compressing... remote: Done: 88.6M remote: -----> Launching... remote: Released v4 remote: https://quiet-tor2-70424.herokuapp.com/ deployed to Heroku remote: Verifying deploy... done. To https://git.heroku.com/qt-tor-70414.git 6977765..43afdc0 master -> master |
Configuration de la base de données Postgres
Installer le add-on Postgres
Voici les étapes afin de créer une nouvelle base de données gratuite Postgres.
Installer le add-on Postgres avec l’interface web ou par la ligne de commande :
À partir du Web :
- Heroku Postgres
- https://elements.heroku.com/addons/heroku-postgresql
À partir du terminal :
1 2 3 |
$ heroku addons:create heroku-postgresql:hobby-dev $ heroku pg:wait $ heroku config -s | grep HEROKU_POSTGRESQL |
Modifier les configurations de votre app Symfony
Une fois le add-on Postgres installé, on vous fournira toutes les informations afin de vous connecter à la nouvelle base de données. Ajouter ces informations de connexion dans votre fichier parameters.yml de votre application Symfony :
parameters:
1 2 3 |
database.driver: pdo_ pgsql database.host: 127.0.0.1 database.port: 3306 |
Utiliser les variables d’environnement
Par contre, si vous désirez définir des variables d’environnement afin de vous connecter à la base de données (solution recommandée), vous devrez utiliser config:set afin de définir des variables d’environnement qui seront utilisée dans un fichier parameters.php
Dans votre terminal :
1 2 3 4 5 6 |
$ heroku config:set SYMFONY_BD_HOST=ec2-107-21.compute-1.amazonaws.com $ heroku config:set SYMFONY_BD_NAME=g45dgg334rg74tb2 $ heroku config:set SYMFONY_BD_USER=sad43fvv5vvefx $ heroku config:set SYMFONY_BD_PORT=5432 $ heroku config:set SYMFONY_BD_PASS=ddd3fw4ffBI $ heroku config:set SYMFONY_BD_DRIVER=pdo_pgsql |
- Contenu du fichier parameters.php
-
123456$container->setParameter('database.driver', getenv('SYMFONY_BD_DRIVER'));$container->setParameter('database.host', getenv('SYMFONY_BD_HOST'));$container->setParameter('database.port', getenv('SYMFONY_BD_PORT'));$container->setParameter('database.name', getenv('SYMFONY_BD_NAME'));$container->setParameter('database.user', getenv('SYMFONY_BD_USER'));$container->setParameter('database.password', getenv('SYMFONY_BD_PASS'));
Initialiser la base de données
Finalement, il faut créer le shéma de la base de données et y insérer vos fixtures. Il est possible d’exécuter la console Symfony à l’aide du heroku toolbelt et de la commande heroku run :
1 2 3 |
$ heroku run php app/console doctrine:schema:create $ heroku run php app/console doctrine:schema:update --force $ heroku run php app/console doctrine:fixtures:load |
Connexion à Postgres avec pgAdmin3
Vous désirez vous connecter à la base de données et l’administrer à distance, vous pouvez installer le logiciel gratuit pgAdmin III :
Sur Ubuntu, on lance :
1 |
$sudo apt-get install pgadmin3 |
no commands defined in the « doctrine:fixtures » namespace
Puisque Symfony est configuré avec un environnement de production, les dépendances de développement ne seront pas installés. Si vous avez l’erreur suivante, une solution est de déplacer la dépendance DoctrineFixturesBundle vers le tableau $bundles = array() de votre fichier AppKernel.php
There are no commands defined in the « doctrine:fixtures » namespace.
1 2 3 |
if (in_array($this->getEnvironment(), array('prod'))) { $bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(); } |
Paramètre le lancement de votre serveur Web avec un procfile
Il est possible de configurer le lancement de votre serveur web grâce à un procfile. Voici quelques exemples :
procfile pour un projet PHP :
1 |
web: vendor/bin/heroku-php-nginx |
procfile pour un projet Node :
1 |
web: node app.js |
https://devcenter.heroku.com/articles/procfile
Références
- http://symfony.com/doc/current/cookbook/deployment/heroku.html
- https://devcenter.heroku.com/articles/getting-started-with-symfony
Laisser un commentaire
Participez-vous à la discussion?N'hésitez pas à contribuer!