Heroku
avec Node.js
utiliser Mac
Mon problème :
State changed from starting to crashed &&
sh: 1: nodemon: not found &&
Failed at...start script &&
status 1...code=H10
Après avoir créé mon front-end, avec React
, serveur arrière, avec node.js
/express.js
et base de données, avec PostgreSQL
, j'ai tenté de déployer mon serveur sur Heroku
avec Git
. Depuis que j'ai déjà eu Git
, je me suis déplacé sur Heroku CLI
Tout d'abord, à partir du terminal
dans mon serveur ...
brew install heroku/brew/heroku
heroku create
git remote -v
git Push heroku master
Si ce n'est pas votre première fois en utilisant Heroku
...
heroku git:remote -a theUrlYouWant
git Push heroku master
... sinon ...Heroku
_ attribue dynamiquement votre application un port, vous ne pouvez donc pas définir le port sur un numéro fixe. Heroku ajoute le port à l'env:
app.listen(process.env.PORT || 3000, () => {
console.log(`app is running on port ${process.env.PORT}`);
})
... Si vous avez ajouté le port:
git add .
git commit -m "adding port"
git Push heroku master
... Enfin, de mon terminal dans le serveur :
➜ folderName git:(master) heroku open
➜ folderName git:(master) heroku logs --tail
2019-05-08T18:07:23.253827+00:00 heroku[web.1]: Starting process with command npm start
2019-05-08T18:07:25.323748+00:00 heroku[web.1]: State changed from starting to crashed
2019-05-08T18:05:17.074233+00:00 app[web.1]: > nodemon fileName.js
2019-05-08T18:05:17.074235+00:00 app[web.1]:
2019-05-08T18:05:17.098124+00:00 app[web.1]: sh: 1: nodemon: not found
2019-05-08T18:05:17.102512+00:00 app[web.1]: npm ERR! file sh
2019-05-08T18:05:17.102801+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2019-05-08T18:05:17.103068+00:00 app[web.1]: npm ERR! errno ENOENT
2019-05-08T18:05:17.103239+00:00 app[web.1]: npm ERR! syscall spawn
2019-05-08T18:05:17.104259+00:00 app[web.1]: npm ERR! [email protected] start: nodemon fileName.js
2019-05-08T18:05:17.104361+00:00 app[web.1]: npm ERR! spawn ENOENT
2019-05-08T18:05:17.104553+00:00 app[web.1]: npm ERR!
2019-05-08T18:05:17.104692+00:00 app[web.1]: npm ERR! Failed at the [email protected] start script.
2019-05-08T18:05:17.104841+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
[...]
2019-05-08T18:05:17.171915+00:00 heroku[web.1]: Process exited with status 1
2019-05-08T18:05:37.338695+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" Host=yourURL.herokuapp.com request_id=hidden fwd="ip" dyno= connect= service= status=503 bytes= protocol=https
Heroku passe par défaut dans un environnement de production afin qu'il n'installe pas les dépendances DEV.
Si vous ne voulez pas réinstaller NODEMON comme une dépendance, ce que je pense que vous ne devriez pas, parce que c'est le bon endroit est dans DevDePendances, pas dans les dépendances ...
Au lieu de cela, vous pouvez créer un deuxième script NPM, dans votre package.json
, pour éviter cette erreur en exécutant nodemon
uniquement dans votre localhost:
"scripts": {
"start": "node fileName.js",
"start:dev": "nodemon fileName.js"
},
Et lorsque vous souhaitez exécuter le projet localement, il suffit de courir dans votre terminal npm start:dev
et il chargera fileName.js
avec nodemon
.
À Heroku, npm start
Exécute par défaut et chargez le nom de fichier.js à partir d'une commande NODE NORMAL et vous vous débarrassez de cette erreur.
2019-05-08T18:13:40.319989+00:00 heroku[web.1]: State changed from crashed to starting
2019-05-08T18:13:41.000000+00:00 app[api]: Build succeeded
2019-05-08T18:13:42.658048+00:00 heroku[web.1]: Starting process with command npm start
2019-05-08T18:13:44.644005+00:00 app[web.1]:
2019-05-08T18:13:44.644025+00:00 app[web.1]: > [email protected] start /app
2019-05-08T18:13:44.644027+00:00 app[web.1]: > node fileName.js
2019-05-08T18:13:44.644028+00:00 app[web.1]:
2019-05-08T18:13:45.158694+00:00 app[web.1]: app is running on port 33333
2019-05-08T18:13:46.293205+00:00 heroku[web.1]: State changed from starting to up
2019-05-08T18:13:47.788861+00:00 heroku[router]: at=info method=GET path="/" Host=yourURL.herokuapp.com request_id=hidden fwd="ip" dyno=web.1 connect=0ms service=11ms status=200 bytes=245 protocol=https
J'ai fait ce message dans l'espoir de vous aider à éviter le temps qu'il m'a fallu de déboguer cette question.
Voici ce qui a fonctionné pour moi:
Dans votre application Heroku, allez à Settings
, puis cliquez sur Reveal Config Vars
puis ajouter un nouvel enregistrement avec KEY
NPM_CONFIG_PRODUCTION
et Value
_ false
.