2. Comment reprendre
un (gros) projet
Ruby on Rails
Yann Klis, Novelys
#parisrb, 06/02/2012, @lacantine
3. • Yann Klis
• Fondateur de Novelys (Strasbourg)
• Forte expertise sur la technologie Ruby/Rails
• Depuis septembre 2005
• Fournit des startups, des collectivités, des PME
• Ruby/Rails/AWS/MySQL/Sphinx/MongoDB
4. Analyse
audit du code source (NDA)
pourquoi ?
schéma de la bdd ?
dump de la bdd ?
suite de tests ?
documentation ?
version de rails ?
version des gems ?
hébergement ?
accès à la plateforme de prod ?
rake stats
Évidemment, c’est la version de l’histoire du côté du client …
5. Hypothèses
de départ
Pas vraiment accès à l'ancienne équipe
Client dans de mauvaises dispositions
Version ancienne de Rails
Pas vraiment de tests
Pas vraiment de doc
Budget serré
...
6. Aspects psychologiques
et méthodologie
”Ajouter une fonctionnalité prend beaucoup de temps”
”Lenteur”
”Beaucoup de bugs”
↓
Repartir d'une base saine et moderne
Ne plus rajouter de nouvelles features pendant 1 à 2 mois
↓
Rajout de fonctionnalités devient moins coûteux
Le vrai boulot va être de regagner la confiance du client
7. Gestion de dépendances
avec bundler
écrire un fichier Gemfile
cf http://gembundler.com/rails23.html pour la mise en place
ls -l vendor/plugins
cat config/environment.rb
Attention si modifs directement dans vendor/plugins !
8. Changer de plugins/gems
l’écosystème de gems évolue lui aussi
file_column → acts_as_attachment → paperclip (carrierwave)
acts_as_authenticated → authlogic → devise
acts_as_taggable → acts_as_taggable_on → acts_as_taggable_on_steroids
acts_as_tree → awesome_nested_set (nested_set)
Ajustements nécessaires dans la base de données, voir
point suivant
9. Mettre à jour Rails
use your version control system
git co -b upgrade_rails && rm -rf * && rails new .
rjs / rhtml
routes.rb
named_scope / scope
syntaxe ActiveRecord
Mettre à jour Rails au moins en 2.3.11
ruby script/plugin install git://github.com/rails/rails_upgrade.git
10. Stratégie
récupération «par appartement»
rm -rf *
↓
git diff/checkout pour chaque modèle/répertoire
Sans doute que la couche d’authentification sera la
première à devoir être migrée
12. ETL
avec rake
customers customers
- name
- name -…
-…
- address_country_1
rake db:backup - address_country_2
- address_country_3
addresses
- customer_id
etl:extract:all - country
db:drop
db:create
db:migrate
etl:load:all
customers.csv
addresses.csv
https://gist.github.com/1746376
13. Reprise fullstack
base de données, serveur web, etc
Mise en place capistrano
Mise en place chaîne de production (staging, production)
Mise en place nouvel hébergement
14. Questions
qui restent en suspens
Faut-il mettre à jour Rails ?
Faut-il mettre à jour Ruby ?
Faut-il introduire des tests ?
Faut-il mettre à jour le code front-end ?
Rails au moins en 2.3.11 pour préparer migration 3.x
Mise à jour ruby 1.9.x == galère avec encoding