Développeur Web RoR

Aller au contenu | Aller au menu | Aller à la recherche

Tag - capistrano

Fil des billets

mercredi 19 septembre 2012

Assets pipeline : precompile assets avec Capistrano

La solution ultime à tous mes problèmes de déploiement.

1) Mettre ceci dans environments/production.rb :

config.assets.precompile += ["*.css", "*.js"]

ça permet de dire à rails de précompiler les css et js en plus des *.coffee *.scss...

2) Mettre ceci dans un before "deploy:create_symlink" do ... end dans le deploy.rb

run_locally "bundle exec rake assets:precompile"
run_locally "cd public; tar -zcvf assets.tar.gz assets"
top.upload "public/assets.tar.gz", "#{release_path}/public/", :via => :scp
run "cd #{release_path}/public; tar -zxvf assets.tar.gz"
run_locally "rm public/assets.tar.gz"
run_locally "rm -rf public/assets"

ça a pour effet de faire le précompile en local, puis compresse les assets les upload dans release_path/public et enfin les extraits.

Lors d'une migration d'une vieille application rails <3.1 vers rails >3.1 il faut également 

- changer les chemins des images "../images/" en "/assets/"

- Faire un meld (comparateur de fichier et répertoire) pour mettre à jour la structure et l'intérieur des fichiers entre l'application et une application vide (rails new empty)

- Pensez également au Gemfile (doit être fait à l'étape précédente)

Bon voilà si vous avez des remarques utilisez twitter (@rivsc57) j'en ai marre du spam...

vendredi 19 novembre 2010

ssh et capistrano sur un long traitement (Connection reset by peer)

Avec capistrano il est fréquent que le déploiement prenne du temps, si le traitement est trop lourd capistrano "freeze".

Exemple : cap deploy:cleanup (quand on a 50 releases sur le serveur :-p)

Il faut régler sur le serveur dans /etc/ssh/sshd_config deux paramètres pour ne pas avoir de "freeze" :

ClientAliveInterval 5 

ClientAliveCountMax 1000

Issu de la documentation :

ClientAliveInterval
Règle un intervalle de temporisation en secondes après lequel, si aucune donnée n'est reçue de la part du client, sshd envoie un message dans le canal crypté pour demander une réponse du client. Par défaut 0, ce qui signifie que ces messages ne sont pas envoyés au client. Cette option ne s'applique qu'à la version 2 du protocole.
ClientAliveCountMax
Règle le nombre de messages de maintien de la connexion (voir ci-dessus) à envoyer sans réponse de la part du client pour sshd Si ce seuil est atteint tandis que les messages de maintien de la connexion ont été envoyés, sshd déconnecte le client et termine la session. Il est important de noter que ces messages de maintien de la connexion sont très différents de l'option KeepAlive (ci-dessous). Les messages de maintien de la connexion sont envoyés par le tunnel crypté, et par conséquent ne sont pas falsifiables. Le maintien de la connexion au niveau TCP activé par l'optionKeepAlive est falsifiable. Le mécanisme de maintien de la connexion est intéressant quand le client ou le serveur ont besoin de savoir si la connexion est inactive.

Par défaut 3. Si l'option ClientAliveInterval (ci-dessus) est réglée à 15, et ClientAliveCountMax est réglée à sa valeur par défaut, les clients ssh qui ne répondent pas sont déconnectés après environ 45 secondes.

vendredi 22 janvier 2010

Les logs des applications RubyOnRails (logger level, keep_releases capistrano) en production

Quand votre déploiement via Capistrano échoue à cause du disque dur du serveur de production qui est plein à cracker le moment arrive pour vous de trouver un moyen d'économiser de la place !

Ah ! Vous avez oublié de penser à ça ! Bon ben vérifiez !

df -h

Ensuite on va selectionner ce qu'il faut pour les logs en production : Dans environments/production.rb sur la ligne du logger (config.logger = Logger.new("#{RAILS_ROOT}/log/#{RAI......):

Ci-dessous : 20.megabyte et la taille de chaques fichiers log, quand le fichier atteint 20 Mo, il est renommé production.log.0 puis
production.log.1
production.log.2
etc...

50 et le nombre de fichier log à conserver les plus anciens sont supprimés.

config.logger = Logger.new("#{RAILS_ROOT}/log/#{RAILS_ENV}.log", 50, 20.megabyte)

Autre chose, soyons selectif, on production seul les messages d'erreurs nous sont utiles, modifiez le niveau du logger :

#Niveaux: :debug, :info, :warn, :error, :fatal
config.logger.level = Logger::ERROR

Tout cela est aussi valable pour le mode "development" (environments/development.rb)

Bon enfin pour capistrano : deploy.rb :

set :keep_releases, 4

La commande permet lors d'un 'cap deploy:cleanup' de ne conserver que 4 releases. (Supprime les anciennes releases ainsi que les logs associés à chaque release)