Rails pipeline 3 et actifs dans le développement / mode de production
-
27-10-2019 - |
Question
Précompilation actifs sur le serveur de production est très lent. J'ai donc décidé de les recompiler sur la machine de développement et télécharger des actifs à l'Amazon S3 par jammit
. Tout est fait, mais j'ai quelques problèmes négatifs:
- Je dois inclure le répertoire de
public/assets
au contrôle degit
. Parce que si le répertoire depublic/assets
est vide sur le serveur de production échoue - Si je PreCompile actifs sur la machine de développement
application.js
inclut dans le code HTML comme comprimé et de cette façon que je l'ai dupliqué code js. La modification js ne fait pas d'effet parce que précompilés interruptions deapplication.js
ce code.
De cette façon, mon processus de développement comprend les étapes suivantes:
- Supprimer actifs précompilés si je vais js modifier ou css
- Faites quelques modifications
- actifs PreCompile
- actifs à S3 Télécharger par
jammit-s3
- N'engager et pousser mes changements, y compris les actifs sur le serveur git
- Déploiement par Capistrano
Mes questions sont les suivantes:
- Est-il possible de configurer l'environnement de développement ne comprennent pas
application.js
comprimé si je l'ai dans le répertoirepublic/assets
? - Est-il possible de configurer l'environnement de production pour le travail avec le répertoire vide
public/assets
? Les actifs ne seront sur le serveur S3.
La solution 2
Je résolu ce problème en incluant les actifs dir dans gitignore et exclure un seul fichier - public/assets/manifest.yml
et le serveur de production fonctionne correctement maintenant, à savoir config.action_controller.asset_host = "http://assets.example.com"
œuvres. Il exige que le fichier de manifest.yml
Autres conseils
Pour la question que je ne sais pas une solution permanente autre que l'exécution:
bundle exec rake assets:clean
Avant de revenir au mode de développement. Je serais curieux de voir si vous pouvez simplement ignorer les actifs en développement sans mettre le pipeline ensemble des actifs hors route.
Dans production.rb il y a une option pour votre deuxième question:
# Enable serving of images, stylesheets, and JavaScripts from an asset server
config.action_controller.asset_host = "http://assets.example.com"
Il doit alors ignorer votre répertoire actif, car il repose sur l'hôte distant. Hope qui aide.