SlideShare a Scribd company logo
1 of 15
#parisrb
Comment reprendre
                un (gros) projet
                 Ruby on Rails


Yann Klis, Novelys
#parisrb, 06/02/2012, @lacantine
• 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
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 …
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é
                               ...
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
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 !
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
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
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
Mauvaise/nouvelle architecture
de la base de données




                    erreur mineure? → migration
           erreur majeure? → ETL (Extract Transform Load)
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
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
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
Questions ?

http://twitter.com/yannski
 http://blog.strasslab.net
 yann.klis@novelys.com

More Related Content

Similar to Comment reprendre un (gros) projet Ruby on Rails

2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturiteRémi Alvado
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLHervé Leclerc
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Jérôme Petazzoni
 
Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)Camille Roux
 
Retour expérience détection fraude temps réel
Retour expérience détection fraude temps réelRetour expérience détection fraude temps réel
Retour expérience détection fraude temps réelMartin Menestret
 
Architecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalArchitecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalThomas Delerm
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versiongoldoraf
 
D’un modèle d'IA dans un notebook à un service temps réel : architecturons !
D’un modèle d'IA dans un notebook à un service temps réel : architecturons ! D’un modèle d'IA dans un notebook à un service temps réel : architecturons !
D’un modèle d'IA dans un notebook à un service temps réel : architecturons ! Marie-Alice Blete
 
Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Adyax
 

Similar to Comment reprendre un (gros) projet Ruby on Rails (20)

Riak introduction
Riak introductionRiak introduction
Riak introduction
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
ORM
ORMORM
ORM
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturite
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 
NoSQL et Big Data
NoSQL et Big DataNoSQL et Big Data
NoSQL et Big Data
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)
 
Retour expérience détection fraude temps réel
Retour expérience détection fraude temps réelRetour expérience détection fraude temps réel
Retour expérience détection fraude temps réel
 
Architecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalArchitecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de Drupal
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de version
 
D’un modèle d'IA dans un notebook à un service temps réel : architecturons !
D’un modèle d'IA dans un notebook à un service temps réel : architecturons ! D’un modèle d'IA dans un notebook à un service temps réel : architecturons !
D’un modèle d'IA dans un notebook à un service temps réel : architecturons !
 
Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"
 

Comment reprendre un (gros) projet Ruby on Rails

  • 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
  • 11. Mauvaise/nouvelle architecture de la base de données erreur mineure? → migration erreur majeure? → ETL (Extract Transform Load)
  • 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

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n