Une voie plus rapide pour déployer du contenu statique à Magento 2? Dev de Vivre etc?
C'est mon environnement. Veuillez noter que ceci est également défini dans les modes de développement et de production pertinents.
Dev:
https://ar.dev.loc/
https://en.dev.loc/
Live:
https://ar.site.com/
https://en.site.com/
j'utilise une configuration multi-magasins avec l'arabe et l'anglais et tout fonctionne bien, y compris la construction de modules et de gabarits.
Cependant, si je fais une modification de fichier ou un fichier JS (malgré l'utilisation de grunt moins ou grunt regarder) j'ai exécuter les commandes suivantes sur mon environnement de développement tout à la fois pour les voir sur ma machine locale.
$ rm -rf var/cache var/page_cache var/view_preprocessed pub/static
$ mkdir pub/static
$ bin/magento setup:static-content:deploy
$ bin/magento setup:static-content:deploy ar_SA
$ grunt exec less // sometimes I leave this do this
$ grunt // I swap between these
cela prend beaucoup de temps pour faire ce processus à chaque fois. C'est frustrant car je suis codeur rapide et aime voir CSS et moins immédiatement sur le site et de ne pas attendre autour.
l'approche rapide que fait notre équipe est en fait d'apporter des changements dans pub/static
et ensuite nous les expédier à moins et app/design
etc et puis faire le processus ci-dessus et puis git.
Vivre serveur est à peu près la même. Git pull puis mode maintenance (madness sur un site ecom en direct! Qui construit M2?? Ensuite, nous exécutons les commandes au - dessus du temps d'arrêt de 45mins)
il doit sûrement y avoir un moyen plus rapide pour notre déploiement, le développement et l'équipe de mieux travailler et de voir les changements plus rapidement sans temps d'arrêt!
même la documentation officielle de Magento 2 dit que votre site doit passer en mode maintenance et temps d'arrêt pour publier le contenu - ce n'est pas une option pour nous. Les CTO ne sont pas contents. Tout simplement absurde.
questions Connexes avec des gens demandant d'accélérer le développement même des questions:
Css changements reflètent seulement après la commande deploy dans magento2
Magento 2 statique de cache
les changements à CSS et JavaScript ne s'appliquent qu'après le déploiement du contenu statique
donc je veux rassembler tous les problèmes et résoudre ceci.
8 réponses
oui, il peut être plus rapide en suivant les étapes :
- changement dans votre fichier js / css dans le répertoire app
- Supprimer maintenant la forme de fichier pub / dossier statique
vous pouvez trouver le fichier dans pub static en suivant la commande
find pub/static -iname yourjsfile.js
- supprimer seulement le fichier dans lequel vous avez des changements de pub/statique folder
- marque sûr que pub / statique.htaccess fichier & pub/statique.php le fichier est là
- attribuer fichier des autorisations d'écriture pour pub dossier
- affiche maintenant L'URL dans le navigateur .htaccess déploiera directement le fichier JS manquant
.htaccess dans pub/static envoyer les fichiers manquants à pub/statique.php avec paramètre ressource et pub/statique.le fichier php crée une ressource statique pour le fichier si disponible et le déploie.
Note: cela ne fonctionne qu'avec apache mod_rewrite
pour Nginx vous devez configurer la même via nginx.conf.échantillon
je ne suis pas familier avec magnéto, mais cela peut fonctionner pour vous. Lorsque je mets à jour mes sites, je suis ces étapes:
supposons que le site est situé dans le répertoire site
.
$ cp -r site site-update
# update the site in site-update directory
$ mv site site-old && mv site-update site
de cette façon, mes sites sont mis à jour sans aucun temps d'arrêt.
Observation générale:
vous ne devez pas faire de"grognement" ici comme vous le faites setup:static-content:deploy. Vous pouvez générer le contenu statique pour en_US (w/o le paramètre) et ar_SA en parallèle (bash vous permet de le faire assez facilement).
si vous manquez ressources HTTPS (secure) (peut-être que c'était la raison pour laquelle vous avez utilisé grunt en plus?), s'assurer que la variable d'environnement "HTTPS" est définie (par exemple HTTPS=ON
) pour le processus de compilation statique contenu ( ref ).
en dehors de cela, oui cela prend du temps. Ce qui a attiré l'attention, c'est que la compilation PHP less prend un certain temps. Une idée qui m'est venue à l'esprit lorsque j'ai entendu parler de cela par un autre développeur était de mettre en cache moins de compilation dans un local moins de cache et de ne recompiler que si un fichier change réellement. Peut-être que vous pouvez l'essayer aussi bien.
Je ne suis pas encore responsable du piratage D'un PoC ensemble pour elle, mais pense que ce devrait être un bon test pour l'affirmation que la moins de compilation est le goulot d'étranglement.
je peux aussi fortement suggérer d'exécuter un serveur de compilation qui compile sur git push automatiquement pour réduire le fardeau.
dans notre société Nous gérons Magento2 déploie en utilisant Capistrano , Il ya aussi un taks spécifiques ensemble pour Magento 2 qui fonctionne très bien.
Avec capistrano vous configurez votre serveur racine pour pointer vers un lien symbolique qui pointe vers un dossier release. Lorsque vous lancez un déploiement, toute la compilation (di, contenu statique, ecc) est faite sur un dossier séparé afin que votre site Web en ligne ne soit pas affecté et reste en ligne. À l' fin de la procédure, et seulement si, il n'y a pas d'erreurs, le lien est passé à la nouvelle version.
de cette façon, le temps d'arrêt est habituellement nul ou réduit à quelques secondes.
Capistrano offre aussi un "rollback", qui permet de revenir rapidement à une ancienne version si quelque chose va mal.
Je n'ai pas touché setup:static-content:deploy
depuis un moment. Après m'être lassé du processus de déploiement lent de Magento 2, j'ai conçu le mien qui me permet de faire un changement dans un fichier CSS ou JS et de le faire refléter presque immédiatement sur le site. Voici la magie:
cd /path/to/docroot/app/design/frontend/$VENDOR/$THEME
find * -type f \( -name "*.css" -o -name "*.js" \) -cmin -10 | xargs -I {} bash -c 'dest=/path/to/docroot/pub/static/frontend/$VENDOR/$THEME/*/$(echo {} | sed -E "s/(web\/|\/[^/]+$)//g"); echo Deploying {} to $dest ...; mkdir -p $dest && cp {} $_'
cd - 1> /dev/null
décomposons-le...
-
cd /path/to/docroot/app/design/frontend/$VENDOR/$THEME
- changement dans le répertoire active theme (remplacer$VENDOR
et$THEME
par vos propres valeurs) -
find * -type f \( -name "*.css" -o -name "*.js" \) -cmin -10
- trouvez tous les fichiers CSS et JS qui ont été modifiés de quelque manière que ce soit au cours des 10 dernières minutes dans le répertoire thème (*
se débarrasse du premier./
dans les résultats); n'hésitez pas à changer l'un des paramètres pour répondre à vos besoins -
xargs -I {} bash -c
- pour chaque fichier modifié, exécutez les commandes #4-6 (le chemin relatif au fichier modifié est stocké dans{}
) -
dest=/path/to/docroot/pub/static/frontend/$VENDOR/$THEME/*/$(echo {} | sed -E "s/(web\/|\/[^/]+$)//g")
- la trajectoire de destination du déploiement- le
*
glob prend soin de correspondance quelle que soit la locale que vous êtes dans -
$(...)
génère un sous-puits pour extraire seulement la partie du chemin source que nous devons ajouter au chemin de destination (web
le niveau de répertoire n'existe pas souspub
)
- le
-
echo Deploying {} to $dest ...
- enregistrez l'activité sur la console pour que vous sachiez quels fichiers sont déployé -
mkdir -p $dest && cp {} $_
- créer la structure du répertoire de destination; si et seulement si la structure du répertoire est créée avec succès, copier le fichier modifié à sa destination de déploiement souspub
($_
points au dernier argument de la commande précédente,mkdir
, qui est$dest
) -
cd - 1> /dev/null
- modifier le répertoire précédent pour que vous puissiez continuer là où vous vous êtes arrêté
vous pouvez jeter tout cela dans un alias pour le réduire à une commande, mais rappelez-vous d'échapper aux guillemets simples:
alias update='cd /path/to/docroot/app/design/frontend/$VENDOR/$THEME; find * -type f \( -name "*.css" -o -name "*.js" \) -cmin -10 | xargs -I {} bash -c '"'"'dest=/path/to/docroot/pub/static/frontend/$VENDOR/$THEME/*/$(echo {} | sed -E "s/(web\/|\/[^/]+$)//g"); echo Deploying {} to $dest ...; mkdir -p $dest && cp {} $_'"'"'; cd - 1> /dev/null'
si vous utilisez varnish, alors vous devriez ajouter une commande pour redémarrer varnish à la fin de l'alias (par exemple, sudo service varnish restart
) ou vous allez probablement encore frapper des ressources statiques cachées.
si vous êtes trop paresseux pour taper update
chaque fois que vous faites un changement, alors vous pouvez le mettre dans un cron ou intégrer dans un grognement de surveiller la tâche ou l'équivalent.
puisque j'utilise l'option -j
(--jobs)
pour bifurquer un nouveau procédé, je réduis le temps static-content:deploy
de plus de 10 minutes à moins d'une minute. Voir Magento/Deploy/Process/Queue.php
php bin/magento setup:static-content:deploy -j[JOBS_AMOUNT]
--jobs
option Activer le traitement parallèle en utilisant le nombre spécifié d'emplois. La valeur par défaut est 4. Pour faire tourner la tâche en un seul processus (par exemple, si votre système ne supporte pas le processus de bifurcation), utilisez--jobs 1
. // voir: devdocs.magento.com
cette option ne peut être utilisée que si pcntl
est activé.
pcntl
aucune bibliothèque externe n'est nécessaire pour construire cette extension.
le soutien de contrôle de processus en PHP est Non activé par défaut.
vous devez compiler la version CGI ou CLI de PHP avec l'option de configuration --enable-pcntl
lors de la compilation de PHP pour activer le support de contrôle des processus.
Note: actuellement, ce module va et non fonction sur les plates-formes non-Unix (Windows).
Note: que
pcntl_fork
Non fonctionne si PHP est exécuté comme un module Apache, auquel cas cette fonction n'existera pas!
je suis venu avec une solution pour ce problème.
vous devez publier le contenu du magasin que vous voulez par
php bin/magento setup:static-content:deploy [lang(en_US)] -t [vendor]/[theme]
Je ne changerai pas parce que magento cache, alors supprimez-le manuellement
rm -rf pub/static/_*/*
php bin/magento cache:flush; php bin/magento cache:clean;
le rafraîchir votre page et fait maintenant il prend de nouvelles modifications quand il régénère de page.
ces étapes sont obligatoires pour les changements dans le contenu phtml et statique, les changements de mise en page exigent cache flush, et les changements sur les contrôleurs sont une douleur dans l'arsh parce que vous devez utiliser di:compilez celui-ci vraiment vous faire partir de la production.
j'ai aussi remarqué que si vous avez CSS et js qui s'affichent, il semble que vous vous êtes déconnecté si vous exécutez la mise à jour de setup upgrade, il casse alors la version et il éteint le CSS/js jusqu'à ce que vous fassiez une reconstruction du contenu statique.
Je n'ai aucune idée de comment ils pensent que cela devrait fonctionner pour les gens dans la production. À peu près n'importe quoi peut le sortir de la folie et vous devez reconstruire.
j'ai eu un peu de chance avec 1. tourner css/js signature sur 2. ensuite vous pouvez l'exécuter le contenu statique se déploie, semble garder l'ur bien en place 3. flush cache (puis ajoute la nouvelle version12312312 aux urls statiques)
mais sérieusement, aucun moyen d'être solide avec les déploiements.
TheBlackBenzKid très curieux où vous avez terminé un an plus tard, avez-vous dump magento?