Créer une application sur Heroku avec Django et NPM
-
28-10-2019 - |
Question
J'écris une application Django qui contient du CoffeeScript.Pour permettre cela, j'utilise django-compresseur qui compile le CoffeeScript en JS avant le lancement de l'application.django-compresseur nécessite que NPM soit installé sur la machine pour compiler CoffeeScript.
Je souhaite maintenant déployer cette application sur Heroku.Je ne peux pas mettre npm dans mon requirements.txt
donc je me demande comment je peux obtenir npm sur le serveur Heroku?
La solution
Remarque : le multi buildpack est bien plus agréablefaçon d'accomplir cela ces jours-ci :)
J'ai créé un fork du buildpack officiel de Python heroku qui permet à un npm_requirements.txt
facultatif d'installer de telles dépendances.
J'utilise maintenant coffeescript et less-css avec django-compresseur sur heroku :)
https://github.com/jiaaro/heroku-buildpack-django
Modifier : pour passer à ma compilation depuis le buildpack standard:
-
utilisez l'application de ligne de commande
heroku
pour définir la variable d'environnementBUILDPACK_URL
:heroku config:add BUILDPACK_URL=git://github.com/jiaaro/heroku-buildpack-django.git
Autres conseils
Si vous voulez éviter de maintenir un buildpack personnalisé, vous pouvez utiliser le multi buildpack .
Utiliser le multi buildpack est super simple:
- Exécutez
heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
- Créez un fichier .buildpacks à la racine de votre référentiel avec deux lignes:
https://github.com/heroku/heroku-buildpack-nodejs.git
https://github.com/heroku/heroku-buildpack-python.git
- Créez un fichier package.json avec vos dépendances npm.
- Exécutez
npm install
Vous pouvez créer votre propre buildpack , qui mélange nodejs buildbpack et pack de construction python .Ou compilez votre CoffeeScript sur votre machine et mettez-le sur S3.
J'ai trouvé cette question dans Google tout en résolvant le même problème pour moi-même.
J'ai fusionné deux buildpacks officiels (python et nodejs), donc maintenant on peut avoir un projet Django avec le fichier standard npm-description package.json
en exécutant cette commande:
heroku config:add BUILDPACK_URL=https://github.com/podshumok/heroku-buildpack-python
Cette solution diffère de celle de Jiaaro par ce qui suit:
- il est basé sur les versions les plus récentes (12 décembre) des buildpacks (par exemple, il exécute collectstatic lors du déploiement)
- vous avez besoin d'un fichier
package.json
correct (au moins le nom et la version de votre produit doivent être spécifiés dans ce fichier) - Les dépendances npm doivent être répertoriées dans
package.json
La solution de @Jiaaro n'a pas fonctionné pour moi ... Provoque une erreur étrange ... /:
File "almalinks/manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
J'étais trop fatigué pour m'en occuper, alors j'ai regardé autour de moi et j'ai trouvé cette ressource intéressante:
- Le livre de recettes heroku-django
Ils expliquent comment vous pouvez ajouter vos propres scripts qui s'intègrent dans les buildpacks par défaut d'heroku.
A travaillé comme un charme.:)
Les choses ont changé au pays d'Heroku
Il n'y a pas besoin de packs de build multiples, de fichiers .builpack ou de packs de build personnalisés.Ajoutez simplement les packs de construction officiels Heroku requis à votre application heroku et ils s'exécuteront dans l'ordre entré.Utilisez l'option d'index pour les réorganiser selon vos besoins.
heroku buildpacks:add --index 1 heroku/nodejs -a your_app_name
Il n'y a pas non plus besoin de tâches gunt, d'applications comme django-bower ou d'autres outils spécialisés qui utilisent les ressources du serveur et ralentissent le temps de construction.
Vous pouvez consulter mon tutoriel sur l'intégration transparente de Django + Bower + Heroku ici .