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). ).
Ruby 2.5.1 Rails 5.0.7.2
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.
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
terminal
#Exécuter dans le répertoire de l'application correspondante
$ bundle update -g development -g test
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
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
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
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
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)
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).
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
~
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
~
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.
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
).
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.
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 ...
secrets.yml
tel quelEn particulier, le fichier de variables d'environnement fonctionnait sans falsification. Lol
Recommended Posts