[RUBY] [Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2

Chose que tu veux faire

Je souhaite passer de la série Rails 5.0 à la série Rails 5.2. (Je voulais utiliser Active Storage qui est disponible depuis Rails 5.2.)

Le but de cet article est de présenter ** les étapes requises pour la mise à niveau de la série Rails 5.0 vers la série Rails 5.2 ** et ** la gestion des erreurs ** qui s'est produite à ce moment-là (et je souhaite utiliser Active Storage). ).

environnement

Ruby 2.5.1 Rails 5.0.7.2

procédure

J'ai beaucoup évoqué l'article Qiita de M. Ito. Version de conservation permanente! ?? Procédure de mise à niveau de l'application style / Rails de M. Ito

En gros, il est facile de comprendre si vous regardez l'article de M. Ito (tomber). Cependant, je pense qu'il y a pas mal de gens qui disent: "Je veux mettre à jour la version dès que possible !!", donc j'espère que vous pouvez le voir d'une mauvaise manière.

En outre, cela devrait couvrir le test, mais cette fois ** le but est d'utiliser Active Storage **, donc je vais omettre cela.

1. Améliorez les gemmes autres que les rails

Si vous mettez d'abord à niveau la version de Rails, les gemmes périphériques comme Devise et Carrierwave peuvent ne pas prendre en charge les derniers Rails et vous pouvez obtenir des erreurs inattendues.

Oui. Ça vient d'arriver. Lol

1-1. Mettez d'abord à jour les gemmes du groupe de développement et de test

terminal


#Exécuter dans le répertoire de l'application correspondante
$ bundle update -g development -g test

1-2. Mettez à jour les gemmes susceptibles de causer des problèmes une par une

L'exécution de la commande bundle obsolète listera les gemmes qui ne sont pas à jour. Cependant, si le nombre de gemmes n'est pas si grand, vous pouvez tout mettre à jour en même temps.

Si vous souhaitez mettre à jour un par un, spécifiez le nom de la gemme après mise à jour du bundle.

terminal


#Lorsque vous souhaitez mettre à jour uniquement concevoir
$ bundle update devise

1-3. Mettez à jour d'autres gemmes à la fois

C'est une mise à jour groupée sans spécifier le nom du gem.

Gemfile


#Laisser la spécification de version de Rails inchangée
gem 'rails', '~> 5.0.7', '>= 5.0.7.2'

Après avoir confirmé que la version de Rails est spécifiée, bundle update

terminal


#Mettre à jour les gemmes en masse
$ bundle update

2. Augmentez la version Rails

Changez la spécification de version de Rails dans le Gemfile en «bundle update rails».

Gemfile


# gem 'rails', '~> 5.0.7', '>= 5.0.7.2'
gem 'rails', '~> 5.2.4', '>= 5.2.4.2'

terminal


$ bundle update rails

3. Exécutez l'application rails: tâche de mise à jour

Exécutez ensuite l'application rails: tâche de mise à jour. Cette tâche vous permet de créer de manière interactive de nouveaux fichiers ou de modifier des fichiers existants selon les besoins de la nouvelle version.

terminal


$ rails app:update
    conflict  config/boot.rb
Overwrite config/boot.rb? (enter "h" for help) [Ynaqdhm]

Comme mentionné ci-dessus, c'est une tâche de vérifier un par un ce qu'il faut faire avec les fichiers qui provoquent des conflits. Répondez avec l'une des touches Y / n / a / q / d / h.

Y -Oui. Ecraser l'exécution
n -Non. Ne pas écraser
a -Tout. Écraser tous les fichiers après ce fichier
q -Quitter. Interruption de traitement
d -Diff. Afficher les différences des anciens et des nouveaux fichiers
h -Aidez-moi. Afficher la signification de chaque clé que vous entrez

«C'est un problème de vérifier celui-ci un par un… puis-je tout faire ensemble?

Oui, je le pensais et j'ai lancé ʻa` = all. Puis «routes.rb» renaît (jour blanc).

** Assurez-vous de ne cocher que routes.rb! Faisons plutôt «n»! !! ** **

M. Ito a également dit cela.

J'entre souvent Y ou n après avoir vérifié d = diff. (Mais la plupart des Y peuvent être saisis sauf pour routes.rb)

4. Contrôle de fonctionnement (si «rails s» démarre)

En dehors de cela, vous devez vérifier le code de test et le voir de vos propres yeux, mais cette fois, nous visons des rails s (démarrer le serveur dans l'environnement de développement pour le moment).

4-1. Erreur ①

Quand je «raconte triomphalement», tout d'abord, cette erreur.

require ': impossible de charger un tel fichier --error avec bootsnap / setup (LoadError).

terminal


$ rails s
Traceback (most recent call last):
	3: from bin/rails:3:in `<main>'
	2: from bin/rails:3:in `require_relative'
	1: from /myapp/config/boot.rb:4:in `<top (required)>'
~~~config/boot.rb:4:in `require': cannot load such file -- bootsnap/setup (LoadError)

J'ai pu répondre par cette méthode. Il y a deux changements (fichiers).

config/boot.rb


ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)

require 'bundler/setup' # Set up gems listed in the Gemfile.
#Supprimer cette ligne ↓ (ou commenter)
require 'bootsnap/setup' # Speed up boot time by caching expensive operations.

config/initializers/new_framework_defaults.rb


~
#Commentez cette ligne ↓
# ActiveSupport.halt_callback_chains_on_return_false = false
~

4-2. Erreur ②

Quand j'ai pensé "Maintenant, il est temps de démarrer le serveur!" Et rails s, j'ai de nouveau une erreur.

<top (required)>': undefined method halt_callback_chains_on_return_false=' for ActiveSupport:Module (NoMethodError)`




#### **`terminal`**
```terminal

=> Booting Puma
=> Rails 5.2.4.3 application starting in development 
=> Run `rails server -h` for more startup options
Exiting
Traceback (most recent call last):
~~~/config/initializers/new_framework_defaults.rb:23:in `<top (required)>': undefined method `halt_callback_chains_on_return_false=' for ActiveSupport:Module (NoMethodError)

J'ai pu répondre ici.

config/initializers/new_framework_defaults.rb


~
#Cette ligne ↓ commenter
# Rails.application.config.action_controller.raise_on_unfiltered_parameters = true
~

Article à lire absolument

L'erreur que j'ai rencontrée cette fois est exactement ce que M. Ito a dit, donc je pense que ce sera utile à l'avenir si vous lisez et comprenez cet article.

Au fur et à mesure que la version de Rails évolue, un nouveau comportement différent du comportement conventionnel peut être introduit. Idéalement, tout sera adapté au nouveau comportement après la mise à niveau, mais dans certains cas, certains comportements devront peut-être être adaptés aux anciens Rails.

Ces changements de comportement sont effectués dans load_defaults et new_framework_defaults_x_x.rb.

La relation entre load_defaults et new_framework_defaults_x_x.rb est expliquée en détail dans l'article suivant, veuillez donc lire ceci et modifier les paramètres en conséquence.

J'ai examiné en détail la relation entre config.load_defaults et new_framework_defaults_x_x.rb --Qiita

La mise à niveau de la version Rails est terminée

Ceci termine la mise à niveau de la version de Rails. Si les étapes ci-dessus ne fonctionnent pas, essayez de redémarrer le serveur (quittez avec ctrl + c, commencez par rails s).

5. Qu'arrive-t-il aux fichiers autour des variables d'environnement?

Le fichier qui définit les variables d'environnement était secrets.yml dans la série Rails 5.0, mais il est courant d'utiliser credits.yml.enc et master.key dans les séries Rails 5.2 et ultérieures.

5-0. "Hein? Pas d'informations d'identification ou de clé principale ??"

Je pensais qu'il serait possible de le faire sans autorisation en mettant à jour la version de Rails, mais il n'y avait pas d'histoire aussi délicieuse. En premier lieu, master.key doit être créé au moment de rails new, il est donc naturel de dire que ...

5-1. Conclusion: vous pouvez laisser secrets.yml tel quel

En particulier, le fichier de variables d'environnement fonctionnait sans falsification. Lol

Recommended Posts

[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
J'ai essayé d'organiser la session en Rails
J'ai essayé d'expliquer la méthode
[Rails] J'ai essayé de supprimer l'application
[JDBC] J'ai essayé d'accéder à la base de données SQLite3 depuis Java.
J'ai essayé de résumer les méthodes utilisées
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé de résumer l'API Stream
Tri des données Décroissant, croissant / Rails
J'ai essayé d'implémenter la fonction de prévisualisation d'image avec Rails / jQuery
J'ai essayé de comprendre comment la méthode des rails "redirect_to" est définie
J'ai essayé de comprendre comment la méthode des rails "link_to" est définie
J'ai essayé de résoudre le problème de la campagne paiza "Challenge from Phantom Thief 813"
Code utilisé pour connecter Rails 3 à PostgreSQL 10
Je veux jouer avec Firestore de Rails
J'ai essayé de configurer tomcat pour exécuter le servlet.
[JDBC ③] J'ai essayé d'entrer à partir de la méthode principale en utilisant des espaces réservés et des arguments.
[Java] Je souhaite calculer la différence par rapport à la date
Tokoro j'ai réécrit dans la migration de Wicket 7 à 8
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
[Rails] Je ne sais pas comment utiliser le modèle ...
Rails6 J'ai essayé d'introduire Docker dans une application existante
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
J'ai essayé Rails débutant [Chapitre 1]
J'ai essayé le problème FizzBuzz
J'ai essayé Rails débutant [Chapitre 2]
J'ai essayé de vérifier yum-cron
J'ai essayé de faire une demande en 3 mois d'inexpérimenté
J'ai essayé d'implémenter la fonction similaire par communication asynchrone
[Rails] J'ai essayé d'utiliser la méthode button_to pour la première fois
J'ai essayé d'augmenter la vitesse de traitement avec l'ingénierie spirituelle
[Rails] [bootstrap] Je souhaite modifier la taille de la police de manière réactive
J'ai essayé de résumer les bases de kotlin et java
[Rails] J'ai essayé de créer une mini application avec FullCalendar
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
J'ai brièvement résumé la grammaire de base de Ruby
J'ai essayé de construire l'environnement petit à petit en utilisant docker
[Rails] J'ai essayé d'implémenter le traitement par lots avec la tâche Rake
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode
J'ai essayé de valider pour unifier comment écrire des balises de hachage
[Rails 6.0, Docker] J'ai essayé de résumer la construction de l'environnement Docker et les commandes nécessaires pour créer un portfolio
Ce que j'ai appris en étudiant les rails
J'ai essayé de mâcher C # (indexeur)
J'ai essayé de résumer le support d'iOS 14
J'ai essayé d'interagir avec Java