Remplacer rvm par rbenv

Il semblerait que rvm soit « so much last year » que je me devais de tester rbenv, dont la promesse est de modifier moins en profondeur le système sur lequel il est installé. Voici comment j’ai procédé sur mon Mac.

Désinstaller rvm

Tout d’abord, vous devez désinstaller rem, en tapant les commandes suivantes :

rvm implode
rm ~/.rvmrc
rm /etc/rvmrc

Attention, en tapant ces commandes, vous désinstallez également les versions de ruby que vous auriez installées au travers de rvm (sur Mac vous vous retrouverez avec un ruby 1.8.7).

Il vous faut également chercher dans les fichiers .bashrc, .profile et .bash_profile si rvm n’a pas ajouté son répertoire à votre path. Si c’est le cas, commentez la ligne en question.

Installer rbenv

Pour installer rbenv, il vous suffit de taper les commandes suivantes :

cd ~
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

Quittez et rouvrez votre terminal pour prendre en compte les modifications.

Pour installer facilement une version de ruby, installez le plugin ruby-build de la manière suivante :

mkdir -p ~/.rbenv/plugins
cd ~/.rbenv/plugins
git clone git://github.com/sstephenson/ruby-build.git

Vous pouvez ensuite installer une version de ruby en tapant la commande suivante :

rbenv install 1.9.3-p194
rbenv rehash

La seconde commande est nécessaire à chaque fois que vous installez une version de ruby ou un gem avec une partie binaire.

Pour utiliser une version de ruby globalement, vous tapez simplement :

rbenv global 1.9.3-p194

Et vous utilisez la version de ruby indiquée. N’oubliez pas ensuite de réinstaller bundler :

gem install bundler

Redémarrez votre terminal, puis dans chacun de vos projets Rails de faire :

bundle install

Via rbenv et ruby-build

Pousser son dépôt git vers un serveur

Lorsque je démarre un nouveau projet, cela se passe toujours sur ma machine cliente, et je crée bien entendu le dépôt git dans la foulée. Ce n’est généralement qu’après que je mutualise ce dépôt en le stockant sur github ou sur mon serveur git personnel.

Voici la méthode que j’utilise pour créer le dépôt à postériori :

# Sur le serveur
mkdir /chemin/vers/git/projet

# Sur le client, depuis le répertoire de votre projet
scp -r .git monloginserveur@monserveur/chemin/vers/git/projet

La commande scp permet de copier des fichiers par ssh. Cette copie binaire permet de dupliquer le dépôt du client vers le serveur en utilisant le login dont vous vos servez pour vous connecter en ssh.

Une fois que vous avez copié le dépôt, vous pouvez ajouter votre serveur comme dépôt distant dans votre projet avec la commande suivante :

git remote add origin ssh://monloginserveur@monserveur/chemin/vers/git/projet

Pour pouvoir pousser vos modifications vers votre serveur, vous devez ensuite taper la commande suivante dans le répertoire git de votre serveur :

git config --bool core.bare true

A partir de Simple Central Git Repository

Comment gérer les utilisateurs et leurs rôles avec une liaison has_one

Je me suis arraché les cheveux pour trouver la bonne manière de gérer un cas d’utilisation relativement courant dans une application web : ayant un modèle (et une table) User, je souhaitais pouvoir affecter un utilisateur à chaque modèle Account (stocké dans une table … accounts) en tant que Manager. Bien entendu, je souhaitais pour voir accéder à mon manager en faisant :

a = Account.first
a.manager = User.first

En fait c’est très simple, en utilisant les options disponibles dans les associations. On aura donc dans le modèle Account une association belongs_to :

class Account < ActiveRecord::Base
  belongs_to :manager, :class_name => 'User'
end

Au lieu de faire simplement un belongs_to :user, on indique à Rails le modèle qui doit être utilisé.
Dans le modèle User, on aura l’association inverse :

class User < ActiveRecord::Base
  has_one :account, :foreign_key => 'manager_id'
end

Afin que Rails puisse retrouver l’utilisateur à partir de la table accounts, il faut bien sûr désigner la colonne qui va héberger l’identifiant de l’utilisateur grâce au paramètre :foreign_key.

Vous aurez bien entendu ajouté cette colonne à la table accounts en créant une migration :

rails g migration AddManagerIdToAccount

Qui contiendra le code suivant :

class AddManagerIdToAccounts < ActiveRecord::Migration
  def change
    add_column :accounts, :manager_id, :integer
  end
end

Vous pouvez ensuite exécuter la migration, et  le tour est joué !

Un terminal en couleurs pour MacOS X

Utilisateur depuis quelques mois d’un MacBook Air, je me demandais comment retrouver dans le terminal le même choix de couleurs que celui dont je bénéficiais sur ma machine Ubuntu. Voici une recette pour mettre de la couleur dans votre terminal.

Ouvrez un terminal, et éditez le fichier .bashrc qui se trouve à la racine de votre dossier utilisateur :

vim ~/.bashrc

Mettez-vous en mode insertion en tapant [i], puis collez les lignes suivantes :

export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced

Enregistrez le fichier en tapant la touche [ESC] puis les touches [:x] . Pour recharger vos préférences, tapez :

source ~/.bashrc

Et le tour est joué !