web-dev-qa-db-fra.com

Heroku: erreur "Aucune langue par défaut n'a été détectée pour cette application" pour une application de nœud

J'apprends NodeJS et le cours que je suis comporte plusieurs projets, classés par sections. J'ai tous les projets dans un dossier principal, qui est aussi un dépôt git .

Chacun de ces sous-dossiers du dossier principal est un projet de noeud proprement dit, complété par package.json et les dépendances associées dans node_modules. Le problème est quand j'ai essayé de pousser l'application du noeud dans un tel dossier (todo-api) à heroku, j'obtiens l'erreur suivante - 

remote: Compressing source files... done.
remote: Building source:
remote: 
remote:  !     No default language could be detected for this app.
remote:                         HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.
remote:                         See https://devcenter.heroku.com/articles/buildpacks
remote: 
remote:  !     Push failed
remote: Verifying deploy...
remote: 
remote: !       Push rejected to agile-forest-32749.
remote: 
To https://git.heroku.com/agile-forest-32749.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to Push some refs to 'https://git.heroku.com/agile-forest-32749.git'

Ceci est la structure de répertoire pour le projet - 

 enter image description here

J'ai décidé de restructurer le sous-dossier todo-api dans un nouveau projet, et cette fois, Push to Heroku fonctionne parfaitement - 

 enter image description here

Je ne comprends pas pourquoi j'obtiens l'erreur "pas de langue par défaut", surtout lorsque l'application de noeud est exactement la même aux deux endroits. Des pensées?

5
Manish Giri

Heroku dispose d'un ensemble de buildpacks par défaut, utilisé lorsqu'il doit détecter la langue de votre application.
Pour effectuer cette détection, il exécute la commande bin/detect de chacun de ces buildpacks par défaut, jusqu'à ce que l'un d'eux retourne un code de sortie égal à 0.

Ceci est la commande pour le noeud buildpack .
Comme vous pouvez le constater, un package.json doit se trouver à la racine de votre application, pas dans un sous-dossier.

C'est la différence qui fait que votre build échoue. Vous devez mettre votre application à la racine de votre référentiel git.

2
Damien MATHIEU

Dans mon cas, Heroku n’était pas configuré dans le dossier racine, car mon référentiel GitHub avait été divisé en dossiers frontend/et backend/. Chacun d'entre eux avait un package.json . Étant donné que Heroku a besoin du fichier package.json situé dans le dossier racine du référentiel, il ne peut pas détecter la langue. 

Dans mon cas, je devais initialiser un référentiel GitHub secondaire dans le dossier backend/. Une fois que le projet principal a été placé dans GitHub en tant que projet séparé, git Push heroku master a fonctionné.

1
Robin Wieruch