8768 sujets

Développement web côté serveur, CMS

Salut à tous !

J'ai une appli sous Symfony 5 dans laquelle j'utilise pour la première fois Encore/UX avec Swup.
C'est assez différent au déploiement de Symfony classique, dans le sens ou ca devient du coup une application NodeJs.
Après quelques difficultés j'ai pu faire le déploiement sur mon serveur mais il me reste un souci : la compilation des assets ne se fait pas ! J'ai donc un dossier "build" quasi vide et rien d'autre que le HTML ne s'affiche.
Il semble y avoir un problème d'exécution des scripts , lorsque j'exécute npm run build j'ai ce message d'erreur :

sh: encore: command not found
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! @ build: `encore production --progress`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the @ build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

En fait, aucun des scripts définis dans le package.json ne fonctionne :
"scripts": {
"dev-server": "encore dev-server",
"dev": "encore dev",
"watch": "encore dev --watch",
"build": "encore production --progress"
}

Ils fonctionnent en dev mais en prod ils me génèrent l'erreur indiquée ci dessus, et je ne vois pas d'ou ce peut venir, ou quoi faire .

Quelqu'un aurait il une idée Smiley sweatdrop ?
Salut, est ce que ENCORE est installé en prod ? j'ai pas l'impression. Qu'est ce que te donne le yarn install ?
Modifié par JENCAL (11 Jan 2023 - 16:53)
Salut Jencal merci de ton attention !

Voilà la procédure que j'ai suivi :

1/ - Envoi des fichiers constituant l'appli vers le serveur de prod ( sauf "vendor", "env.local" et "node_modules") --> par FTP
2/ - Création d'un environnement virtuel NodeJs pour accès aux commandes npm --> avec le Setup NodeJs App du CPanel de mon hébergeur
3/ - Connexion en SSH via Putty (conseillé par l'hébergeur plutôt que le terminal du CPanel) pour :
a. - Installation des dépendances Symfony (dans l'appli) --> composer install
b. - Téléchargement dans l'environnement de prod de Encore --> composer require symfony/webpack-encore-bundle
c. - Installation des dépendances NodeJs (dans l'environnement virtuel) --> npm install
( C'est bien à ce moment que s'installe Encore sur le serveur ? )
là j'ai ce message qui me dit ne pas pouvoir installer mon joli UX-Swup sous prétexte qu'il manque un package.json dans le vendor relatif a NODEVENV, que je ne connais pas mais dont j'ai un dossier sur le serveur, avec un package.json dans le .lib :

npm WARN optional SKIPPING OPTIONAL DEPENDENCY:
@symfony/ux-swup@file:vendor/symfony/ux-swup/assets (node_modules/@symfony/ux-swup):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY:
Could not install from "../nodevenv/mercstation/14/lib/vendor/symfony/ux-swup/assets" as it does not contain a package.json file.


d. - Enfin compilation des assets --> npm run build :

et je retrouve le message cité dans mon 1er post et dont voici le log debug complet :

0 info it worked if it ends with ok
1 verbose cli [
1 verbose cli '/opt/alt/alt-nodejs14/root/usr/bin/node',
1 verbose cli '/opt/alt/alt-nodejs14/root/usr/bin/npm',
1 verbose cli 'run',
1 verbose cli 'build'
1 verbose cli ]
2 info using npm@6.14.17
3 info using node@v14.20.1
4 verbose run-script [ 'prebuild', 'build', 'postbuild' ]
5 info lifecycle @~prebuild: @
6 info lifecycle @~build: @
7 verbose lifecycle @~build: unsafe-perm in lifecycle true
8 verbose lifecycle @~build: PATH: /opt/alt/alt-nodejs14/root/usr/lib/node_modules/npm/node_modules.bundled/npm-lifecycle/node-gyp-bin:/home2/ewrt9829/mercstation/node_modules/.bin:/opt/alt/alt-nodejs14/root/usr/bin:/home2/ewrt9829/nodevenv/mercstation/14/bin:/opt/alt/alt-nodejs14/root/usr/bin:/home2/ewrt9829/nodevenv/mercstation/14/lib/bin/:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/cpanel/composer/bin:/home2/ewrt9829/.local/bin:/home2/ewrt9829/bin
9 verbose lifecycle @~build: CWD: /home2/ewrt9829/mercstation
10 silly lifecycle @~build: Args: [ '-c', 'encore production --progress' ]
11 info lifecycle @~build: Failed to exec build script
12 verbose stack Error: @ build: `encore production --progress`
12 verbose stack spawn ENOENT
12 verbose stack at ChildProcess.<anonymous> (/opt/alt/alt-nodejs14/root/usr/lib/node_modules/npm/node_modules.bundled/npm-lifecycle/lib/spawn.js:48:18)
12 verbose stack at ChildProcess.emit (events.js:400:28)
12 verbose stack at maybeClose (internal/child_process.js:1088:16)
12 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:296:5)
13 verbose pkgid @
14 verbose cwd /home2/ewrt9829/mercstation
15 verbose Linux 4.18.0-372.19.1.lve.el7h.x86_64
16 verbose argv "/opt/alt/alt-nodejs14/root/usr/bin/node" "/opt/alt/alt-nodejs14/root/usr/bin/npm" "run" "build"
17 verbose node v14.20.1
18 verbose npm v6.14.17
19 error code ELIFECYCLE
20 error syscall spawn
21 error file sh
22 error errno ENOENT
23 error @ build: `encore production --progress`
23 error spawn ENOENT
24 error Failed at the @ build script.
24 error This is probably not a problem with npm. There is likely additional logging output above.
25 verbose exit [ 1, true ]



Webpack est pourtant installé sur le serveur d'après les manips décrites, non ?


Edit : Ca y est, j'ai réussi à avoir l'affichage sur le site grâce à la commande ./node_modules/.bin/encore production, comme indiqué dans la doc https://symfony.com/doc/current/frontend/encore/faq.html, commande exécutée en local. J'ai ensuite uploadé le fichier build sur le serveur de prod et ça s'affiche. Par contre j'ai d'autres problèmes maintenant (affichage des images, le lien en base n'est pas le même que en local / 404 sur les liens serveur, et peut être d'autres trucs), je vais voir ça de mon côté et au pire reposter sous un autre titre plus pertinent.
Merci pour ton aide, à bientôt !
Modifié par 21t0r01 (11 Jan 2023 - 21:28)