Déplacer une application Rails d’un serveur à un autre

Ayant recyclé une machine plus puissante comme serveur interne, je me suis trouvé face à la tâche fastidieuse de déplacer mes applications Rails d’un serveur à l’autre. Je détaille ici à titre d’aide-mémoire les opérations à effectuer, les problèmes rencontrés et les solutions apportées.

Recopier les fichiers de l’application

Pour recopier les fichiers de l’application, deux possibilités : modifier votre fichier de déploiement si vous utilisez capistrano, c’est la méthode la plus pérenne; en mode « quick and dirty », je passe par rsync pour synchroniser les répertoires.

Pour cette deuxième méthode, connectez vous à votre serveur source, et tapez la commande suivante :

rsync -a /source/path/to/myapp/ user@mytargetserver.org:/target/path/to/myapp/

Vous devrez bien sûr donner le mot de passe de user sur mytargetserver.org.

Migrer la base de données

Nous allons tout d’abord exporter les données depuis le serveur mysql source. Connectez-vous à votre serveur source en ssh et exportez la base de données avec la commande suivante :

mysqldump -u user -pmypassword myapp_production > myapp_production.sql

Recopiez la base de données sur votre machine cible, en utilisant par exemple la commande scp :

scp myapp_production.sql user@mytargetserver.com:

Connectez-vous à votre machine cible, lancez mysql et tapez la commande suivante pour créer votre base de données :

create database redmine_production;

Donnez les droits à votre utilisateur mysql sur votre base de données ; pour ce faire, lancez mysql avec votre utilisateur root et votre mot de passe, puis tapez la commande suivante :

grant all on myapp_production.* to 'myrailsuser'@'localhost';

Quittez mysql et importez ensuite votre base de données en tapant la commande   suivante :

mysql -u user -pmypassword myapp_production < my app_production.sql

Problèmes rencontrés

Fatal error lors du bundle install

Mon application n’était plus installée au même endroit que précédemment, et bundler avait gardé en configuration le chemin ou se trouvait le bundle sur la précédente machine. J’ai eu droit à un joli message du genre :

Unfortunately, a fatal error has occurred. Please see the Bundler troubleshooting documentation at http://bit.ly/bundler-issues. Thanks!

Avec comme information supplémentaire qu’il n’arrivait pas à créer une arborescence de répertoires dans /var/www

Pour trouver l’endroit du stockage, il suffit de taper :

bundle config path

Editez le fichier qui contient la configuration locale avec votre éditeur préféré et faites le pointer sur le répertoire bundle de votre application.

Impossible de trouver un gem lors de bundle install

Si lors de l’installation des gems avec bundle vous obtenez la sortie suivante :

Fetching gem metadata from http://rubygems.org/..
Could not find gem-xxx in any of the sources

Ou gem-xxx peut être n’importe lequel de vos gens, il vous suffit de procéder comme suit :

  1. Supprimer le fichier Gemfile.lock
  2. Modifier le fichier de configuration locale de bundler (chemin visible avec bundle config) pour passer le paramètre freeze à 0 au lieu de 1.
  3. Relancer la commande bundle install
  4. Modifier le fichier de configuration de bundler pour remettre freeze à 1.
0 réponses

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *