Django-compressor: Erreur de compression hors ligne

Créé le 25 sept. 2013  ·  6Commentaires  ·  Source: django-compressor/django-compressor

J'ai passé une semaine à déboguer cela (deux semaines différentes) et je suis assez frustré. Je pense avoir lu presque tous les articles/articles de blog/numéros et je ne sais pas quoi faire. J'ai à la fois un serveur de mise en scène et un serveur de production (chacun avec des seaux s3 séparés) et cela fonctionne sur la mise en scène, mais pas sur la production, même si les serveurs (sur Heroku) et les seaux sont identiques.

J'ai fait en sorte que les balises de compression n'apparaissent que dans le modèle enfant. J'ai supprimé toutes les balises de modèle à l'intérieur des balises de compression (par exemple, if/else)., ce qui signifie que j'ai plus de balises de compression afin que les instructions if/else puissent être en dehors des balises de compression.

Est-ce que quelqu'un a une compression hors ligne fonctionnelle configurée en production quelque part à regarder ? Avec compress offffline=False - il y a une charge supplémentaire importante sur le serveur, souvent un délai supplémentaire de 300 à 500 ms, ce qui n'en vaut évidemment pas la peine et va à l'encontre de l'objectif de ce package.

J'aurais vraiment besoin d'aide, mais je n'ai fondamentalement aucune idée de ce qu'il faut faire à ce stade, car c'est le même problème que vous pouvez lire avec des centaines de personnes dans la liste des problèmes ici, dans des articles de blog ailleurs, et aucune solution reproductible ne semble être suggéré - ce qui est un énorme problème pour quelque chose d'aussi crucial pour les performances et que nécessite probablement tout déploiement de Django.

deployment

Commentaire le plus utile

Ces derniers jours, j'étais occupé à résoudre le même problème, et voici quelle était la solution, au cas où cela aiderait quelqu'un.

Dans l'un des modèles, où le problème était reproductible, j'utilisais le contexte. Lors de la compression hors ligne, il n'y a pas d'accès au contexte, c'est pourquoi la clé générée lors de la compression hors ligne et celle du cycle de réponse vont évidemment être différentes.

Essayez d'isoler les parties de JavaScript où vous comptez sur le contexte d'un autre bloc, qui se trouve en dehors de la balise compress.

Espérons que cette information aide quelqu'un.

Tous les 6 commentaires

Pareil ici. Il semble que COMPRESS_OFFLINE de django_compressor crée plus de problèmes qu'il n'en résout. Je n'arrive pas à le faire fonctionner car je reçois de tels messages:

OfflineGenerationError: You have offline compression enabled but key "%s" 
is missing from offline manifest. You may need to run "python manage.py compress".

Pareil ici :/

Impossible de faire fonctionner la compression hors ligne. Continuez à obtenir OfflineGenerationError.

Je me suis donc assuré d'exécuter ce qui suit lors de chaque déploiement sur tous les serveurs Web

python manage.py compress --force
python manage.py collectstatic

Cela devrait actualiser le fichier manifest.json. Je m'assure également que le nom du fichier manifeste est différent à chaque poussée. Comme ajouter un numéro de version. manifest_%s.json
J'utilise le dernier identifiant de hachage git commit pour le plugin %s. Ainsi, lors du déploiement, il effectue un git pull, compress, collectstatic, créant un nouveau css/js minifié/agrégé avec un nouveau fichier manifest.json.
Et puis je redémarre apache. Donc tout doit être fluide.

De plus, je me suis assuré que collectstatic n'appelait pas --clear, pour supprimer les anciens médias statiques/*.

Avoir du sens ?

ok j'ai exactement le même problème.
Quelqu'un l'exécute-t-il hors ligne à partir de S3 de manière fiable ?

Ces derniers jours, j'étais occupé à résoudre le même problème, et voici quelle était la solution, au cas où cela aiderait quelqu'un.

Dans l'un des modèles, où le problème était reproductible, j'utilisais le contexte. Lors de la compression hors ligne, il n'y a pas d'accès au contexte, c'est pourquoi la clé générée lors de la compression hors ligne et celle du cycle de réponse vont évidemment être différentes.

Essayez d'isoler les parties de JavaScript où vous comptez sur le contexte d'un autre bloc, qui se trouve en dehors de la balise compress.

Espérons que cette information aide quelqu'un.

Cette page vous a été utile?
0 / 5 - 0 notes