J'ai ma première application node.js (fonctionne bien localement) - mais je ne peux pas la déployer via heroku (première fois avec heroku également). Le code est ci-dessous. SO ne me laisse pas écrire autant de code, donc je dirais simplement que l'exécution du code localement sur mon réseau ne présente aucun problème.
var http = require('http');
var fs = require('fs');
var path = require('path');
http.createServer(function (request, response) {
console.log('request starting for ');
console.log(request);
var filePath = '.' + request.url;
if (filePath == './')
filePath = './index.html';
console.log(filePath);
var extname = path.extname(filePath);
var contentType = 'text/html';
switch (extname) {
case '.js':
contentType = 'text/javascript';
break;
case '.css':
contentType = 'text/css';
break;
}
path.exists(filePath, function(exists) {
if (exists) {
fs.readFile(filePath, function(error, content) {
if (error) {
response.writeHead(500);
response.end();
}
else {
response.writeHead(200, { 'Content-Type': contentType });
response.end(content, 'utf-8');
}
});
}
else {
response.writeHead(404);
response.end();
}
});
}).listen(5000);
console.log('Server running at http://127.0.0.1:5000/');
Une idée ?
Réponses:
Heroku attribue dynamiquement à votre application un port, vous ne pouvez donc pas définir le port sur un nombre fixe. Heroku ajoute le port à l'env, vous pouvez donc le retirer de là. Changez votre écoute à ceci:
De cette façon, il écoutera toujours le port 5000 lorsque vous testerez localement, mais cela fonctionnera également sur Heroku.
Vous pouvez consulter les documents Heroku sur Node.js ici .
la source
L'erreur se produit lorsque Heroku n'a pas réussi à lier le port ou le nom d'hôte à
server.listen(port, [host], [backlog], [callback])
.Ce dont Heroku a besoin est
.listen(process.env.PORT)
ou.listen(process.env.PORT, '0.0.0.0')
Donc, de manière plus générique, pour prendre en charge d'autres environnements, utilisez ceci:
la source
Il convient de mentionner que si votre code ne spécifie pas de port, il ne devrait pas être un
web
processus et devrait probablement être unworker
processus à la place.Donc, changez votre
Procfile
pour lire (avec votre commande spécifique remplie):puis également exécuter sur CLI:
la source
start
script dans monpackage.json
J'ai eu le même problème lors de l'utilisation du projet généré par yeoman angular-fullstack et la suppression du paramètre IP a fonctionné pour moi.
J'ai remplacé ce code
avec
la source
Pour ceux qui passent à la fois un port et un hôte, gardez à l'esprit que Heroku ne se liera pas
localhost
.Vous devez passer
0.0.0.0
pour l'hôte.Même si vous utilisez le bon port. Nous avons dû faire cet ajustement:
Ensuite, vous pouvez démarrer le serveur, comme d'habitude:
Vous pouvez voir plus de détails ici: https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error
la source
const port = 3000;
pourconst port = process.env.PORT || 3000;
qu'il fonctionne sur HerokuDans mon cas, j'utilisais l'exemple de https://hapijs.com/
Pour résoudre le problème que j'ai remplacé
avec
la source
process.env.PORT
correctement, mais en laissant dans lehost
param: vous ne pouvez pas :) voir ici: stackoverflow.com/a/34956330/626369Changer mon port d'écoute de 3000 pour
(process.env.PORT || 5000)
résoudre le problème.la source
Dans mon cas, j'utilisais Babel avec le plugin babel-plugin-transform-inline-environment-variables . Apparemment, Heroku ne définit pas la variable PORT env lors d'un déploiement, il
process.env.PORT
sera donc remplacé parundefined
, et votre code reviendra au port de développement dont Heroku ne sait rien.la source
Modifier
package.json
:et
Server.js
:la source
package.json
. Je pense que sa mise à jour devrait également résoudre ce problème.J'ai eu le même problème parce que je n'ai pas défini
Procfile
. Validez un fichier texte dans le répertoire racine de votre application nomméProcfil
e sans extension de fichier. Ce fichier indique à Heroku la ou les commandes à exécuter pour démarrer votre application.la source
J'ai eu le même problème que j'ai pu résoudre en remplaçant «localhost» par IP qui est «0.0.0.0»
la source
Un numéro fixe ne peut pas être défini pour le port, heroku l'attribue dynamiquement à l'aide
process.env.PORT
. Mais vous pouvez les ajouter tous les deux, comme ceciprocess.env.PORT || 5000
. Heroku utilisera le premier, et votre hôte local utilisera le second.Vous pouvez même ajouter votre fonction de rappel. Regardez le code ci-dessous
la source
De toutes les solutions que j'ai essayées, personne ne travaille comme prévu, j'étudie heroku par défaut, le fichier .env doit maintenir le port de convention, process.env.PORT, heroku par défaut recherchera le mot-clé PORT.
Annulez tout changement de nom tel que APP_PORT = utilisez plutôt PORT = dans votre fichier env.
la source
À partir du processus Heroku Bash, transmettez la valeur de $ PORT à votre application de nœud en utilisant un analyseur d'options comme Yargs.
Voici un exemple de la façon dont vous pourriez le faire. Sur l'objet scripts, à l'intérieur de package.json, ajoutez une méthode de démarrage "node server --port $ PORT".
Dans votre fichier serveur, utilisez yargs pour obtenir la valeur de l'option de port (--port $ PORT) de la méthode de démarrage:
Désormais, lorsque votre application démarre, elle se lie à la valeur définie dynamiquement de $ PORT.
la source
Si, comme moi, vous configurez Heroku pour exécuter un script à partir de votre
package.json
fichier lors du déploiement, assurez-vous que vous n'avez pas codé en dur la valeur dePORT
dans ce script! Si vous le faites, vous finirez comme moi et passerez une heure à essayer de comprendre pourquoi vous obtenez cette erreur.la source
J'ai eu le même problème mais avec express et apollo-server. La solution d' ici :
la source
Dans mon cas, j'ai eu deux problèmes ...
1) aucun écouteur du tout en raison de l'exécution de l'application à partir d'un autre fichier d'entrée et ce script d'exécution a été supprimé des "scripts" package.json
2) Problème sensible à la casse avec «Sequelize» au lieu de «Sequelize»
la source
J'utilise ReactJs, si vous voulez télécharger sur heroku ajoutez ceci dans votre webpack.config.js
Parce que sinon, vous aurez une erreur
la source
Dans mon cas, ni le port ni l'hôte n'étaient le problème. Le
index.js
fichier était divisé en 2 fichiers.server.js
:de
package.json
nous avons courunode app.js
.Apparemment, c'était ça le problème. Une fois que j'ai combiné les deux en un seul fichier, l'application Heroku s'est déployée comme prévu.
la source
Mon problème était que lors du déploiement sur Heroku, j'ai eu une erreur:
lors de l'exécution
heroku logs --tail
dans le terminal. MAIS l'application s'exécuterait comme prévu lorsque j'exécutais le serveur localement.Je l'avais dans mon
index.js
fichier (fichier serveur)Mais aurait dû avoir cette
Utilisez
process.env.PORT
, nonprocess.env.port
, car ceport
n'est pas la même chosePORT
qu'évidemment.Crédit à gprasant .
la source
J'ai réalisé que je n'avais pas besoin du numéro de port dans le point de terminaison de la demande, donc le point de terminaison l'était
herokuapp.com
et nonherokuapp.com:5000
.L'
listen()
appel peut être sans hôte ni rappel:la source