Capistrano Multi-Stage et Git

Bloc Note, Capistrano, Ruby on Rails 1 Comment »

Je suis passé à Git pour ma gestion de révision de fichiers en abandonnant peu à peu SVN. Je vous le conseille fortement d’ailleurs… La gestion des branches est beaucoup plus facile et intuitive que SVN.

Pour mes projets Rails j’ai besoin au minimum d’avoir 2 branches : Une pour ma version de production et une pour ma version de développement.

Ma version de développement sera dans une branche dev, et ma version de prod dans master.

Mais voilà… pour pouvoir déployer ma version de dev il faut que la branche se situe également sur le serveur et pas seulement en local sur ma machine.

La solution est de créer une remote branche :
$ git push origin origin:refs/heads/dev
$ git fetch
$ git branch -r

Voilà, notre branche a été créé sur le dépôt.

Maintenant créons une branche en local qui permet de travailler directement sur la remote branch précédemment créée :
$ git checkout --track -b dev origin/dev

Nous voilà donc avec 2 branches.

Note : Pour pouvoir fair un push de ma branche dev, un simple git push ne semble pas fonctionner lorsque l’on est dans la branche dev. Je fais donc :
$ git push origin dev

Déploiement

Nous allons utiliser le plugin capistrano-ext :
gem install capistrano-ext

voici mon deploy.rb se situant dans config/
set :stages, %w(prod dev)
set :default_stage, "dev"
require 'capistrano/ext/multistage'
require 'mongrel_cluster/recipes'
default_run_options[:pty] = true

Je vais créer le dossier config/deploy/ dans lequel se situera mes fichiers dev.rb et prod.rb

Me voilà donc prêt à déployer mes applications
$ cap dev deploy:setup
// Paramétrages des fichiers de config database.yml et mongrel_cluster_(dev)(prod).yml
$ cap dev deploy:cold
$ cap dev deploy (pour le déploiement normal)

Pour déployer la version en production, rien de plus simple :
$ cap prod deploy:setup
$ cap prod deploy:cold
$ cap prod deploy (pour le déploiement normal)

Il m’est maintenant plus aisé d’avoir ma version stable et de développement. Lorsque ma version de développement est validée, je la merge dans mon master :
(master) $ git merge dev

Comment trier vos Hash

Bloc Note, Ruby No Comments »

Par défaut les Hash en ruby sont non triés ! Cela peut être génant lorsque l’on veut justement qu’ils le soient ! Heureusement il existe un gem qui permet d’avoir ce comportement !

http://collections.rubyforge.org/

Pour l’installer rien de plus simple :

gem install collections

Ensuite rien de bien compliqué non plus !

[ruby]
require ‘rubygems’
require ‘collections’
# or
require ‘collections/sequenced_hash’
hash = SequencedHash.new
hash[:v1] = « v1″
hash[:v2] = « v2″
hash[:v3] = « v3″
hash.inspect # => {:v1=> »v1″, :v2=> »v2″, :v3=> »v3″}
hash.at(0) # => « v1″
hash.at(1) # => « v2″
[/ruby]

Eternity ii : Impossible à résoudre ?

Bloc Note 8 Comments »

Je viens de lancer un test pour le jeu eternity ii. J’ai écris un petit programme en ruby qui permet de calculer le nombre de combinaisons possibles pour faire un premier carré de 4×4 en haut à gauche. Donc il y a un bord en haut et à gauche.

Mon petit programme qui tourne à environ 15000 pièces/secondes m’a trouvé pour le moment 135000 positions (valides) différentes pour le départ de 4×4… selon mes calculs, ca devrait dépasser le million (aisément).

Donc mis à part un gros coup de chance… je ne pense pas que le puzzle soit solutionnable par la programmation…

Il est toujours plaisant de se creuser la tête cela dit ! Si jamais je trouve la solution, je vous le dirai !

Configurer un serveur OVH avec freeBSD pour Ruby on Rails avec NGINX

Bloc Note, Ruby 3 Comments »

Bon me revoilà … Cela faisait quelques temps que je voulais faire ce post, mais le temps me manque en ce moment !
Donc le but de cet article est de faire un retour d’expérience pour la configuration d’un serveur freeBSD pour héberger des sites Ruby on Rails.

Pré-requis

L’administration et l’installation d’un serveur freeBSD n’est pas une chose triviale. Des connaissances sont nécessaires pour pouvoir appréhender cette tâche. Vous devrez par exemple savoir configurer et partitionner un disque dur. Connaître les commandes de base Unix.

Partitionnement du disque dur

Tout d’abord, lorsque l’on commande un serveur freeBSD à OVH, il me semble que le partitionnement du disque dur ne convienne pas. En effet j’ai eu un problème de place sur la partition /. Je vous invite donc de réinstaller la machine en choisissant le partitionnement. Voilà comment je l’ai partitionné :
10Go pour /
10Go pour /var
2Go pour le swap
le reste du disque pour le /home

A cela s’ajoute bien entendu le swap.
Je sais j’ai un peu abusé mais j’avais de l’espace disque :)

Ensuite lorsque la machine a été correctement installée et que vous pouvez vous connecter avec votre client ssh favoris voici les premières commandes à taper :
Read the rest of this entry »

Comment paginer avec une collection existante ?

Bloc Note, Ruby No Comments »

J’ai eu un petit soucis avec le système de pagination de Ruby on Rails. En effet celui-ci ne propose pas de paginer une collection existante.

Ainsi :

[ruby]
@liens =Liens.find(:all, :includes=>tags, :conditions=> »tags.id IN (1,2,3) »)

[/ruby]
Ne peut pas être paginé avec la fonction paginate de Rails.

Pour pouvoir paginer une collection existante, il suffit d’ajouter cette fonction dans votre controlleur :

[ruby]
def paginate_collection(collection, options = {})
default_options = {:per_page => 10, :page => 1}
options = default_options.merge options
pages = Paginator.new self, collection.size, options[:per_page], options[:page]
first = pages.current.offset
last = [first + options[:per_page], collection.size].min
slice = collection[first...last]
return [pages, slice]
end

[/ruby]

Et ensuite, l’utiliser comme ceci :

[ruby]
liens = Liens.find(:all, :includes=>tags, :conditions=> »tags.id IN (1,2,3) »)
@pages, @liens = paginate_collection liens, :page=> params[:page]
[/ruby]

Et là magie !

Ce bout de code a été trouvé à l’adresse suivante :
http://snippets.dzone.com/posts/show/389

Il existe aussi le plugin will_paginate
Ce plugin devrait être intégré à Ruby on Rails 2.0… donc à suivre de près.

Pouvoir utiliser ses helpers avec ActionMailer

Bloc Note, Ruby No Comments »

Par défaut, on ne peut pas utiliser les helpers de son site pour la génération des emails avec ActionMailer.
Cela dit, il suffit d’ajouter une seule ligne dans le modele mailer.rb :
[ruby]
helper :application
[/ruby]

Avec cette commande, tous les helpers se trouvant dans application_helper.rb seront accessibles !

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Connexion