Déployer votre app Symfony sur Heroku

Commandes de bases

Voici les commandes de base afin de déployer votre APP Symfony sur Heroku :

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.

Une fois la modification poussée sur Heroku,

Vous pouvez lancer la commande suivante qui vous permettra de voir les logs défilés dans votre terminal :

Vous pourrez ainsi voir les erreurs directement dans votre terminal :

Note

2016-02-17T15:40:39.527049+00:00 app[web.1]: [2016-02-17 15:40:39]
request.CRITICAL: Uncaught
PHP Exception Symfony\Component\Debug\Exception\FatalThrowableError:
« Fatal error: Call to undefined function FOS\UserBundle\Util\mb_convert_case() »

Problèmes rencontrés

Type de projet mal détecté

Avertissement

Solution

Définir le type de projet avec la command buildpacks:set :

Erreur lors de la configuration de votre application Heroku

Fatal error: Class not found

Note

remote: PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Fatal error: Class ‘Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle’ not found in /tmp/build_8745efadea59e27a866383c617a2d4ed/app/AppKernel.php:32

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.

Note

2016-02-17T15:40:39.527049+00:00 app[web.1]: [2016-02-17 15:40:39] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\FatalThrowableError: « Fatal error: Call to undefined function FOS\UserBundle\Util\mb_convert_case() »

 

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 :

Finalement, pousser le code sur Heroku :

–no-dev –optimize-autoloader

Il est conseillé de lancer composer avec les options –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 :

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 :

À partir du terminal :

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:

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 :

Contenu du fichier parameters.php

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 :

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 :

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.

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 :

procfile pour un projet Node :

https://devcenter.heroku.com/articles/procfile

Références

Comments

comments

0 réponses

Répondre

Want to join the discussion?
Feel free to contribute!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *