Luciano Becerra
sur Des rails,Mises à jour
Cet article est le premier de notreLa série Upgrade Rails ouvre une nouvelle fenêtre. Nous couvrirons les aspects les plus importants que vous devez connaître pour mettre à jour votreRubis sur railsouvre une nouvelle fenêtrecandidature deversion 2.3ouvre une nouvelle fenêtrepour3.0ouvre une nouvelle fenêtre.
- Les préparatifs
- version rubis
- Outils
- Protection XSS
- Fichiers de configuration
- Gemmes
- RSpec
- Ignorer les modules Rails
- HTML échappé par défaut
- Dépréciations
- Enregistrement actif
- Courrier d'action
- Syntaxe ERB
- Assistants AJAX
- Métal
- Rails
- Prochaines étapes
1. Préparatifs
Avant de commencer le processus de mise à niveau, nous avons quelques préparations recommandées :
- Votre application Rails devrait avoir la dernièreversion corrigéeouvre une nouvelle fenêtreavant de passer à la prochaine version majeure/mineure.
- Vous devez avoir une couverture de test d'au moins 80 %, sauf si vous disposez d'une équipe d'assurance qualité dédiée.
- Suivez un workflow de flux Git pour gérer activement au moins deux environnements : la mise en scène et la production.
- Vérifiez votre Gemfile.lock pour les incompatibilités en utilisantRailsBumpouvre une nouvelle fenêtre
- Créez un mécanisme de double démarrage, le moyen le plus rapide de le faire est d'installer le joyau pratiquerails_suivantsouvre une nouvelle fenêtre.
Pour plus de détails, consultez notre article surComment préparer votre application pour une mise à niveau Rails ouvre une nouvelle fenêtre.
2. Version rubis
Rails 3.0 nécessite Ruby1.8.7ouvre une nouvelle fenêtreou plus, mais pas plus de1.9.3ouvre une nouvelle fenêtre. Si vous souhaitez utiliser Ruby 1.9.x, nous vous recommandons de passer directement à 1.9.3. Aussi Rubis1.9.1ouvre une nouvelle fenêtren'est pas utilisable car il a des défauts de segmentation sur Rails 3.0. Cela signifie que le compatibleVersions rubisouvre une nouvelle fenêtrepour Rails 3.0 sont 1.8.7,1.9.2ouvre une nouvelle fenêtre, ou 1.9.3.
Il y a unplugin officielouvre une nouvelle fenêtrequi facilite le processus de mise à niveau. Il vous suffit d'installer le script en faisantscript/plugin installer git://github.com/rails/rails_upgrade.git
puis courirrails de râteau : mise à niveau : vérification
pour voir la plupart des fichiers que vous devez mettre à niveau dans votre application. Il fournit également d'autres générateurs pour mettre à niveau des zones spécifiques de votre application, comme les itinéraires ou les gemmes.
Parfois, il est également utile de vérifier quels fichiers ont changé entre deux versions spécifiques de Rails. Heureusem*ntRails différentielsouvre une nouvelle fenêtrerend cela facile.
4. Protection XSS
Dans cette version, Rails ajoute automatiquementProtection XSSouvre une nouvelle fenêtreafin d'échapper à tout contenu, vous devrez donc probablement mettre à jour vos modèles en fonction de cela. Heureusem*nt il y a unplugin officielouvre une nouvelle fenêtrepour ça. Nous vous recommandons d'y jeter un œil.
5. Fichiers de configuration
Rails 3 introduit le concept d'objet Application. Un objet d'application contient toutes les configurations d'application spécifiques et est similaire au fichier config/environment.rb actuel de Rails 2.3. L'objet application est défini dans config/application.rb. Vous devriez y déplacer la plupart de la configuration que vous aviez dans config/environment.rb.
En termes de routes, vous devez appliquer quelques modifications à votre fichier routes.rb. Par exemple:
# Rails 2.3 voies :Contrôleur d'action::Routage::Itinéraires.dessiner faire |carte| carte.ressources :des produitsfin# Voie Rails 3.0 :Nom de l'application::Application.itinéraires faire ressources :des produitsfin
Si vous avez installé le plugin mentionné à l'étape 3, vous pouvez exécuter "rake rails:upgrade:routes" pour générer un nouvel ensemble de routes. Tu peux aller àCet articleouvre une nouvelle fenêtrepour lire un article détaillé sur ce sujet.
6. Gemmes
Bundlerouvre une nouvelle fenêtreest le moyen par défaut de gérer les dépendances Gem dans les applications Rails 3. Vous devrez ajouter unFichiers de gemmesouvre une nouvelle fenêtreà la racine de votre application, définissez-y toutes vos gemmes, puis débarrassez-vous des instructions config.gem.
# Avant:configuration.gemme 'aws-sdk', :version => '1.0.0' # (config/environnement.rb)configuration.gemme 'faire levier', :version => ['>= 0.6.0', '< 0.7.0'] # (config/development.rb)# Maintenant:(Fichiers de gemmes)gemme 'aws-sdk', '1.0.0'groupe :développement faire gemme 'faire levier', '~> 0.6.0'fin
N'oubliez pas que si vous avez installé le plugin mentionné à l'étape 3, vous pouvez exécuterrails de râteau : mise à niveau : gemmes
. Cette tâche extraira vos appels config.gem et générera du code que vous pourrez mettre dans votre Gemfile.
7. RSpec
Si vous utilisez RSpec 1.x pour vos tests, vous devez mettre à jour vers RSpec 2.x. Vous devrez peut-être mettre à jour certaines références àSpécification
avecRSpec
.
8. Ignorer les modules Rails
Si vous n'avez pas besoin de charger un module (prenons actionmailer comme exemple), dans Rails 2, vous utiliserez une configuration comme celle-ci dans votre fichier environment.rb :
configuration.cadres -= [ :action_mailer ]
Pour Rails 3, vous devez supprimer cela et modifier la façon dont vous avez besoindes rails
dans votre nouveau fichier application.rb :
exiger "des rails"# au lieu de `require "rails/all"`%w( active_record action_controller active_resource rails/test_unit).chaque faire |cadre| commencer exiger "#{cadre}/railtie" sauvetage LoadError finfin
9. HTML échappé par défaut
Dans Rails 3, vous n'avez plus besoin d'utiliser leh
méthode d'assistance pour échapper au HTML. Il est maintenant échappé par défaut. Si vous avez besoin de dire à Rails de ne pas échapper au HTML, vous devrez appeler.html_safe
sur cette chaîne.
10. Dépréciations
Il y a un tas de dépréciations qui se produisent au cours de cette version :
Enregistrement actif
-
La méthode pour définir une portée nommée s'appelle maintenant
portée
au lieu deportée_nommée
. -
Dans les méthodes de portée, vous ne transmettez plus les conditions sous forme de hachage :
# Avant:portée_nommée :actif, :conditions => ["actif = ?", vrai]# Maintenant:portée :actif, où("actif = ?", vrai)
-
enregistrer (faux)
est obsolète, vous devez donc utiliserenregistrer(:valider => faux)
. -
Les messages d'erreur I18n pour Active Record doivent être modifiés de
:en.activerecord.errors.template
pour:fr.errors.template
. -
model.errors.on
est déprécié au profit demodel.errors[]
-
Il existe une nouvelle syntaxe pour les validations de présence :
# Avant:valide_présence_de :e-mail# Maintenant:valide :e-mail, présence:vrai
ActiveRecord ::Base.colorize_logging
etconfig.active_record.colorize_logging
sont dépréciés au profit deRails :: LogSubscriber.colorize_logging
ouconfig.colorize_logging
.
Courrier d'action
:jeu de caractères
,:type_de_contenu
,:mime_version
,:ordre_de_pièces_implicite
sont tous obsolètes au profit deActionMailer.default :clé => valeur
déclarations de style.- Mailer dynamique
create_method_name
etlivrer_method_name
sont obsolètes, appelez simplementnom_méthode
qui renvoie maintenant unCourrier ::Message
objet.
# Avant:message = UtilisateurMail.create_welcome_email(utilisateur)UtilisateurMail.livrer(message)# ouUtilisateurMail.livrer_bienvenue_email(utilisateur)# Maintenant:UtilisateurMail.bienvenue_email(utilisateur).livrer
template_root
est obsolète, passez des options à un appel de rendu à l'intérieur d'un proc à partir duformat.mime_type
méthode à l'intérieur du bloc de génération de courrier.- La méthode body pour définir les variables d'instance est obsolète (
corps {:ivar => valeur}
), déclarez simplement les variables d'instance directement dans la méthode et elles seront disponibles dans la vue.
# Avant:définitivement bienvenue_email(utilisateur) ... corps {:utilisateur => utilisateur, :url => "https://fastruby.io"}fin# Maintenant:définitivement bienvenue_email(utilisateur) ... @utilisateur = utilisateur @url = "https://fastruby.io"fin
- Les mailers devraient maintenant être dans app/mailers au lieu de app/models.
Syntaxe ERB
Les aides de bloc qui utilisent concat (par exemple, form_for, form_tag) devront remplacer< %
avec<%=
. La syntaxe actuelle continuera de fonctionner pour le moment, mais vous recevrez des avertissem*nts d'obsolescence car elle disparaîtra à l'avenir.
Aides AJAX
Les assistants AJAX JavaScript ont été déplacés pour être discrets et utiliser:distant => vrai
. Selon l'appel d'assistance, certains écouteurs d'événements JavaScript peuvent devoir être ajoutés. Par exemple:
link_to_remote ("Exemple de mise à jour", :mise à jour => 'result_div_id', :URL => { :action => 'exemple'})
Devra changer pour :
lié à "Exemple de mise à jour", { :action => 'exemple' }, :télécommande => vrai, :identifiant => 'mon lien'
Et un écouteur d'événement JavaScript devra être ajouté pour ce que fait la "mise à jour".
Exemple:
$("#mon lien").sur('ajax:succès', fonction(réponse, statut) { $("#result_div_id").html(réponse.texte de réponse)})
Métal
Étant donné que Rails 3 est plus proche deÉtagèreouvre une nouvelle fenêtre, leMétalouvre une nouvelle fenêtrel'abstraction n'est plus nécessaire.
C'est leexplication officielleouvre une nouvelle fenêtrede ce que vous devez faire pour mettre à jour vos métaux existants :
- Si votre métal se comporte comme un middleware, ajoutez-le à la pile middleware via config.middleware.use. Vous pouvez utiliser des méthodes sur la pile middleware pour contrôler exactement où elle doit aller.
- S'il se comporte comme un point de terminaison Rack, vous pouvez vous y connecter dans le routeur. Cela se traduira par un temps de routage plus optimal et vous permettra de supprimer le code de votre point de terminaison qui correspond à des URL spécifiques en faveur d'une gestion plus puissante dans le routeur lui-même.
À l'avenir, vous pouvez utiliser ActionController :: Metal pour obtenir un contrôleur très rapide avec la possibilité d'activer des fonctionnalités spécifiques du contrôleur sans payer la pénalité de la pile complète du contrôleur.
Rails
Railsouvre une nouvelle fenêtredéprécie les constantes suivantes dans cette version :
RAILS_ROOT
en faveur deRails.root
RAILS_ENV
en faveur deRails.env
RAILS_DEFAULT_LOGGER
en faveur deRails.logger
Aussi,PLUGIN/rails/tâches
etPLUGIN/tâches
ne sont plus chargés toutes les tâches, doivent maintenant être danslib/tâches
.
# Avant :fournisseur/plugins/ombulabs_patches/tasks/s3_backup.rake# Maintenant :lib/tasks/ombulabs_patches/s3_backup.rake
11. Prochaines étapes
Après avoir correctement exécuté votre application dans Rails 3.0, vous souhaiterez probablement continuer à travailler sur ce parcours de mise à niveau de Rails. Alors n'oubliez pas de consulter notreLa série de mise à niveau des rails ouvre une nouvelle fenêtrepour rendre cela facile.
Si vous n'êtes pas encore sur Rails 3.0, nous pouvons vous aider ! Téléchargez notre eBook gratuit :Le guide complet de mise à niveau des rails ouvre une nouvelle fenêtre.