Utiliser les services Public Cloud d’OVH sur Mac

En plein dans la lecture de Deploying Rails, un bouquin instructif sur l’automatisation du déploiement de l’infrastructure pour sites Rails, je me suis inscrit au Cloud Public d’OVH pour mettre en pratique l’enseignement du livre. Ce dernier ayant pour sujet le scriptage des actions de mise en ligne d’une application, la présence d’APIs dans la solution d’OVH me paraissait être un argument important en faveur de ce produit.

OVH propose même un script permettant de réaliser les appels à l’API directement à partir de la ligne de commande. Sous Ubuntu, pas de problème, tout se passe bien. Mais sous Mac OSX, pas si simple, et les tentatives de téléchargement automatique des différents modules perl nécessaires se sont soldés par des échecs.

En googlant, je suis heureusement tombé sur deux articles qui m’ont tiré d’affaire. Pour installer CPAN qui va vous permettre d’installer d’autres modules, il vous faut procéder de la manière suivante :

  • Installer XCode (https://developer.apple.com/xcode/) – vous devrez vous enregistrer mais le téléchargement est gratuit pour Mountain Lion.
  • Lancer XCode et ouvrir les Preferences.
  • Cliquer sur l’onglet Downloads
  • Cliquer pour installer les Command Line Tools

En ouvrant un Terminal, tapez les commandes suivantes :

$ sudo perl -MCPAN -e shell
perl> o conf init

Vous pouvez ensuite mettre CPAN à jour en tapant la commande suivante :

sudo perl -MCPAN -e 'install Bundle::CPAN'

Avant de pouvoir lancer le script ovhcloud, il vous faut le modifier légèrement, en ajoutant la ligne suivante sous l’instruction use strict; située ligne 14 :

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0;

Vous pouvez maintenant bénéficier du script ovhcloud sur Mac OSX !

via Noemi Millman, PilgrimX182

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é !