web-dev-qa-db-fra.com

Heroku ENOENT: aucun fichier ou répertoire de ce type, stat '/app/build/index.html'

Je ne parviens pas à gérer un simple site de test à Heroku. Pour une raison quelconque, il essaie de diffuser le contenu de/app/build/lorsque je souhaite le diffuser depuis/build /.

Erreur: ENOENT: aucun fichier ou répertoire de ce type, stat '/app/build/index.html'

Je lis ici de ne pas utiliser __dirname dans l'application express comme Heroku le définit sur/app et que je devrais utiliser process.cwd ();

process.env.PWD = process.cwd();

Mais ça n'a pas marché. Vous trouverez ci-dessous la structure de l'application serveur.js Express et de son dossier.

const path = require('path');
const express = require('express');
const port = process.env.PORT || 8080;
const app = express();

process.env.PWD = process.cwd();

app.use(express.static(process.env.PWD + '/build'));

app.get('*', function (req, res) {
  const index = path.join(process.env.PWD, '/build/index.html');
  res.sendFile(index);
});

app.listen(port);
console.log('server_started');

 directory structure

6
screenm0nkey

Tout d'abord, n'utilisez pas PWD. Il suffit d'utiliser __dirname. Cela fonctionne sur Heroku exactement comme partout ailleurs. L'utilisation de PWD rend votre application plus fragile si vous exécutez, par exemple, un fichier binaire à partir d'un répertoire non local.

Deuxièmement, la raison pour laquelle ce fichier n'existe pas sur Heroku est probablement due au fait que vous l'avez ajouté à votre fichier .gitignore ou que vous ne l'avez généralement pas archivée dans git. Vous pouvez voir cela à partir du code couleur de votre éditeur: tous les fichiers archivés dans git sont en blanc, ceux qui sont ignorés en gris (comme le répertoire node_modules et build/bundle). Votre fichier d'index est rouge (pas blanc comme les fichiers archivés). Ainsi, lorsque vous git Push heroku master, les fichiers que vous référencez n'existent pas.

Enfin, ENOENT dit que/app/build est simplement dû au fait que votre répertoire racine/home sur Heroku est/app. Ne créez jamais d'applications qui sont verrouillées dans une structure de fichier absolue. utilisez simplement des chemins relatifs (sinon, votre application sera interrompue si vous la déplacez même dans un autre répertoire de votre ordinateur local).

app.get('*', function (req, res) {
  const index = path.join(__dirname, 'build', 'index.html');
  res.sendFile(index);
});
19
hunterloftis

dist dossier est ignoré. Par conséquent, heroku renvoie cette erreur. Lorsque vous répertoriez les fichiers de votre application dans heroku, vous pouvez constater qu’il en manque.

Comment lister les dossiers/fichiers dans heroku

  1. run heroku run bash en ligne de commande dans le dossier de votre application
  2. tapez dir et entrez. alors vous verrez la liste des dossiers et des fichiers
7
jasharbn

Vérifiez votre fichier package.json

"postinstall": "ng build --aot --prod"

Vérifiez votre fichier server.js

const express = require('express');
const path = require('path');
const app = express();

app.use(express.static(__dirname + '/dist/YOURPROJECTNAME'));
app.get('/*', function(req,res) {
res.sendFile(path.join(__dirname + '/dist/YOURPROJECTNAME/index.html'));

});

app.listen(process.env.PORT || 8080);
4
Yakup Ad

Une fois que vous avez ajouté l'emplacement du fichier statique avec:

app.use(express.static('build'));

Express recherche les fichiers par rapport au répertoire statique. Le nom du répertoire statique ne fait donc pas partie de l'URL. Vous devriez pouvoir faire ceci pour obtenir index.html:

app.get('*', function (req, res) {
  res.sendFile('index.html');
});

Voir https://expressjs.com/fr/starter/static-files.html

2
David Thomas

J'ai eu un problème similaire où Heroku open a continué à se plaindre pour avoir manqué index.html à l'intérieur de /app. Cependant, cela fonctionnait très bien localement 'Heroku Local'.

Le problème était que j'avais explicitement ignoré les fichiers/dossiers compilés, par exemple. /dist dans le fichier gitignore et, par conséquent, /dist n'a jamais été inséré dans le dossier heroku déployé.

Faire,

heroku git bash
dir

et assurez-vous que dist folder (with compiled files) est répertorié ici et que tout devrait bien se passer.

0
immirza

Notez qu'il est préférable d'utiliser la commande heroku-postbuild dans votre script plutôt que de pousser le dossier build.

"scripts": {
  "start": "node index.js",
  "heroku-postbuild": "cd client && npm install && npm run build"
}
0
user1449456