8
votes

Comment attrapez-vous des erreurs dans le pipeline Asset Rails avant la production?

Je suis juste en train de me familiariser avec des rails 3.1, et j'ai brûlé un certain temps à la mise à jour d'un ancien projet et essayant de déterminer la manière dont le nouveau pipeline d'actif se comporte en mode de développement par rapport à la production.

La valeur par défaut config.assets.precompile se bénisse seulement applicatif.css et Application.js , avec l'intention que tout soit servi. En tant que feuille de style unique et un seul fichier JavaScript.

Évidemment, il existe des situations lorsque nous ne voulons pas cela, nous pouvons donc ajouter des éléments à la liste dans cette variable de configuration ...

Voici la situation que j'ai rencontrée avec mon projet Sandbox lors de la production:

  1. parcouru le site du développement, a vu que tout fonctionnait. Les actifs étaient liés en tant que fichiers distincts et le site affiché correctement.
  2. Téléchargez le site sur mon serveur et essayé de le faire fonctionner dans la production. La première erreur disait que "Ie.css" (une feuille de style conditionnel) n'est pas précompilée. (J'étais dans Safari et cette fiche de style ne serait même pas téléchargée: l'erreur a été relevée à partir du stylesheet_link_tag Helper avant de rendant la page.)
  3. Ran Rake Assets: Précompile ET ÉTÉ ESSÉDUÉ.
  4. a ajouté l'élément incriminé à config.assets.precomple et essayé à nouveau.
  5. a lancé l'erreur dans le trottoir jusqu'à ce qu'il ait une autre erreur d'actif.
  6. goto 3.

    Ne sachant pas comment aborder cela, je suis allé dans des cercles plusieurs fois jusqu'à ce que je pensais avoir tous les actifs et le site rendu en production. Ensuite, je l'ai essayé dans msie et frappe une autre erreur 500: "belated_png_fix.js" était chargé de manière conditionnelle, et il n'a pas reculé jusque-là.

    Donc, ma question est autre que ma question, autre que l'essai et l'erreur ou une forte dépendance à l'essai d'intégration, comment puis-je prédire que mon site ne va pas bombarder lorsque le pipeline d'actif découvre que certains stylesheet ou JavaScript n'étaient pas ajoutés à la liste de précompiler?

    Je suis également curieux Pourquoi un actif de la feuille de style manquant doit entraîner une erreur de la page de la totalité de 500 au lieu de simplement la compiler à la demande ou la servant A 404 lorsque cet actif est demandé. Est-ce un design délibéré pour "échouer tôt"?


1 commentaires

J'ai récemment converti une ancienne application au pipeline d'actif et n'avait aucun problème. Il m'a fallu un moment pour savoir comment tout a fonctionné ensemble. Pour répondre à votre question, pouvez-vous montrer le contenu de vos fichiers CSS et JS, en particulier les déclarations requises? Je suis également intéressé par la façon dont vous les appelez à partir de la vue. Enfin, sont-ils tous dans les applications / actifs ou utilisez-vous lib / actifs et fournisseurs / actifs aussi?


4 Réponses :


1
votes

J'ai eu des problèmes similaires avec des rails 3.1 aussi. La meilleure chose à faire est d'installer Capistrano Multi Stade et d'obtenir un serveur de stadification.

Si cela n'est pas possible, installez une machine virtuelle sur votre ordinateur et essayez de reproduire votre environnement de serveurs.


1 commentaires

Oui, je le fais déjà, essentiellement. Il tombe sous la rubrique «Essai-and-Error» (qui pourrait certainement être automatisé de tests d'intégration ... peut-être qu'il n'y a pas de meilleur moyen.)



0
votes

Cela peut être surchargé, mais cela fonctionne pour moi (cela me donne des actifs propres, compilés). J'ai cela dans mon fichier .bash_profile. xxx

et ceci dans ma configuration / environnements / production.rb (Production des forces pour compiler en cas de besoin; ne devrait pas être nécessaire si je me souviens de Exécuter "ggo" d'abord): xxx

Donc, mon flux de travail est: 1. Code 2. Git Add & Git Engagement 3. Si j'ai touché des fichiers CSS / Sass / JS / Coffeescript, je gère GGO. Sinon, je fais un déploiement de capuchon normal.


1 commentaires

Truc utile, mais le problème est que le précompilisation n'agit que sur des articles qu'il connaît. L'astuce consiste en quelque sorte à déterminer quelles ressources étaient liées de diverses vues et en veillant à ce qu'elles soient ajoutées à la liste.



1
votes

Le déploiement continu est une bonne chose, et vous devriez aller au point de savoir où il est si simple que ce n'est vraiment pas douloureux de toute façon. Qui étant dit, config.assets.precomplets. / code> peut prendre des regexs, alors que diriez-vous de proposer une standard pour les fichiers "Manifest" de haut niveau, ou un sous-dossier standard pour les choses qui ne seront pas fournies. en haut? (Notez que je n'ai pas encore essayé cela ...)


0 commentaires

2
votes

Je viens de publier un joyau appelé actifs_procompile_forcer , ce qui garantit que les développeurs n'oublieront pas d'ajouter Actifs à CONFIG.ASSETS.PRECOMPILE pendant qu'ils se développent. Une exception sera soulevée si vous incluez un actif via javascript_include_tag ou stylesheet_link_tag , et il ne correspond pas à un filtre dans config.assets.precompile.

Cela signifie que les erreurs d'actif seront capturées pendant le développement, au lieu d'être découvertes après le déploiement de la production.


0 commentaires