[RUBY] [Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen

Was du machen willst

Ich möchte ein Upgrade von der Rails 5.0-Serie auf die Rails 5.2-Serie durchführen. (Ich wollte Active Storage verwenden, das seit Rails 5.2 verfügbar ist.)

In diesem Artikel werden ** die Schritte vorgestellt, die für ein Upgrade von der Rails 5.0-Serie auf die Rails 5.2-Serie erforderlich sind ** und ** die Fehlerbehandlung **, die zu diesem Zeitpunkt aufgetreten ist (und ich möchte Active Storage verwenden). ).

Umgebung

Ruby 2.5.1 Rails 5.0.7.2

Verfahren

Ich habe mich stark auf Herrn Itos Qiita-Artikel bezogen. Permanente Aufbewahrungsversion! ?? Upgrade-Verfahren für Stil / Rails-App von Mr. Ito

Grundsätzlich ist es leicht zu verstehen, wenn Sie sich den Artikel von Herrn Ito ansehen (umfallen). Ich denke jedoch, dass es einige Leute gibt, die sagen: "Ich möchte die Version so schnell wie möglich aktualisieren !!", also hoffe ich, dass Sie es auf böse Weise sehen können.

Es sollte auch den Test abdecken, aber dieses Mal ** dient der Zweck der Verwendung von Active Storage **, also werde ich das weglassen.

1. Verbessere andere Edelsteine als Rails

Wenn Sie zuerst die Version von Rails aktualisieren, unterstützen Peripherie-Edelsteine wie Devise und Carrierwave möglicherweise nicht die neuesten Rails, und es können unerwartete Fehler auftreten.

Ja. Es ist einfach passiert. Lol

1-1. Aktualisieren Sie zuerst die Edelsteine der Entwicklungs- und Testgruppe

terminal


#Führen Sie im Verzeichnis der entsprechenden App aus
$ bundle update -g development -g test

1-2. Aktualisiere Edelsteine, die wahrscheinlich nacheinander Probleme verursachen

Wenn Sie den Befehl "Bundle veraltet" ausführen, werden die veralteten Edelsteine aufgelistet. Wenn die Anzahl der Edelsteine jedoch nicht so groß ist, können Sie alles auf einmal aktualisieren.

Wenn Sie nacheinander aktualisieren möchten, geben Sie den Edelsteinnamen nach "Bundle-Aktualisierung" an.

terminal


#Wenn Sie nur Geräte aktualisieren möchten
$ bundle update devise

1-3. Aktualisiere andere Edelsteine sofort

Es handelt sich um ein Bundle-Update ohne Angabe des Edelsteinnamens.

Gemfile


#Lassen Sie die Rails-Versionsspezifikation unverändert
gem 'rails', '~> 5.0.7', '>= 5.0.7.2'

Nachdem Sie bestätigt haben, dass die Rails-Version angegeben ist, klicken Sie auf "Bundle-Update"

terminal


#Aktualisieren Sie Edelsteine in großen Mengen
$ bundle update

2. Erhöhen Sie die Rails-Version

Ändern Sie die Rails-Versionsspezifikation in der Gemfile in "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. Führen Sie die Rails-App aus: Update-Aufgabe

Führen Sie dann die Rails-App aus: Update-Aufgabe. Führen Sie diese Aufgabe aus, um interaktiv neue Dateien zu erstellen oder vorhandene Dateien gemäß den Anforderungen der neuen Version zu ändern.

terminal


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

Wie oben erwähnt, ist es eine Aufgabe, nacheinander zu überprüfen, was mit den Dateien zu tun ist, die Konflikte verursachen. Antworten Sie mit einer der Tasten J / n / a / q / d / h.

Y -Ja. Ausführung überschreiben
n -Nein. Nicht überschreiben
a -Alles. Überschreiben Sie alle Dateien nach dieser Datei
q -Verlassen. Verarbeitungsunterbrechung
d -Diff. Zeigen Sie Unterschiede zwischen alten und neuen Dateien an
h -Hilfe. Zeigen Sie die Bedeutung jedes von Ihnen eingegebenen Schlüssels an

"Es ist mühsam, dies einzeln zu überprüfen ... kann ich alles zusammen machen?"

Ja, das dachte ich mir auch und lief a = all. Dann wurde route.rb komplett wiedergeboren (Ist es ein weißer Tag).

** Stellen Sie sicher, dass Sie nur route.rb überprüfen! Lass es uns lieber n machen! !! ** ** **

Herr Ito sagte dies auch.

(Mit Ausnahme von route.rb kann jedoch der größte Teil des Y eingegeben werden.) 4. Funktionsprüfung (ob "Schienen s" startet) Außerdem müssen Sie den Testcode überprüfen und mit eigenen Augen sehen. Dieses Mal werde ich "Rails" anstreben (den Server vorerst in der Entwicklungsumgebung starten). 4-1. Fehler ① Wenn ich triumphierend "Schienen s", zunächst aus diesem Fehler.

require ': Diese Datei kann nicht geladen werden - Fehler mit 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)

Ich konnte mit dieser Methode antworten. Es gibt zwei Änderungen (Dateien).

config/boot.rb


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

require 'bundler/setup' # Set up gems listed in the Gemfile.
#Diese Zeile löschen ↓ (oder auskommentieren)
require 'bootsnap/setup' # Speed up boot time by caching expensive operations.

config/initializers/new_framework_defaults.rb


~
#Kommentieren Sie diese Zeile aus ↓
# ActiveSupport.halt_callback_chains_on_return_false = false
~

4-2. Fehler ②

Als ich dachte "Jetzt ist es Zeit, den Server zu starten!" Und "Rails s", bekam ich wieder einen Fehler.

<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)

Ich konnte hier antworten.

config/initializers/new_framework_defaults.rb


~
#Diese Zeile ↓ auskommentieren
# Rails.application.config.action_controller.raise_on_unfiltered_parameters = true
~

Muss Artikel lesen

Der Fehler, auf den ich dieses Mal gestoßen bin, ist genau das, was Herr Ito gesagt hat. Ich denke, es wird in Zukunft nützlich sein, wenn Sie diesen Artikel lesen und verstehen.

Mit zunehmender Version von Rails kann ein neues Verhalten eingeführt werden, das sich vom herkömmlichen Verhalten unterscheidet. Im Idealfall wird nach dem Upgrade alles an das neue Verhalten angepasst. In einigen Fällen muss das Verhalten jedoch möglicherweise an die alten Rails angepasst werden.

Diese Verhaltensänderungen werden in load_defaults und new_framework_defaults_x_x.rb vorgenommen.

Die Beziehung zwischen load_defaults und new_framework_defaults_x_x.rb wird im folgenden Artikel ausführlich erläutert. Lesen Sie diese Informationen und ändern Sie die Einstellungen entsprechend.

Ich habe die Beziehung zwischen config.load_defaults und new_framework_defaults_x_x.rb im Detail untersucht - Qiita

Das Upgrade der Rails-Version ist abgeschlossen

Damit ist das Rails-Versions-Upgrade abgeschlossen. Wenn die oben genannten Schritte nicht funktionieren, starten Sie den Server neu (beenden Sie mit "Strg + C", beginnen Sie mit "Rails s").

5. Was passiert mit den Dateien um die Umgebungsvariablen?

Die Datei, die die Umgebungsvariablen definiert, war "Secrets.yml" in der Rails 5.0-Serie, aber es ist üblich, "Credits.yml.enc" und "Master.key" in der Rails 5.2-Serie und höher zu verwenden.

5-0. "Huh? Keine Anmeldeinformationen oder Hauptschlüssel?"

Ich dachte, dass es möglich wäre, es ohne Erlaubnis zu schaffen, indem man die Version von Rails aktualisiert, aber es gab keine so köstliche Geschichte. Erstens sollte "master.key" zum Zeitpunkt von "Rails New" erstellt werden, daher ist es natürlich zu sagen, dass ...

5-1. Fazit: Sie können secret.yml so lassen, wie es ist

Recommended Posts

[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich habe versucht, die Sitzung in Rails zu organisieren
Ich habe versucht, die Methode zu erklären
[Rails] Ich habe versucht, die Anwendung zu löschen
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
Ich habe versucht, die verwendeten Methoden zusammenzufassen
Ich habe versucht, das Iterator-Muster zu implementieren
Ich habe versucht, die Stream-API zusammenzufassen
Daten sortieren Absteigend, aufsteigend / Schienen
Ich habe versucht, die Bildvorschau mit Rails / jQuery zu implementieren
Ich habe versucht zu verstehen, wie die Rails-Methode "redirect_to" definiert ist
Ich habe versucht zu verstehen, wie die Rails-Methode "link_to" definiert ist
Ich habe versucht, das Paiza-Kampagnenproblem "Herausforderung von Phantomdieb 813" zu lösen.
Code zum Verbinden von Rails 3 mit PostgreSQL 10
Ich möchte mit Firestore von Rails spielen
Ich habe versucht, Tomcat so einzustellen, dass das Servlet ausgeführt wird.
[JDBC ③] Ich habe versucht, mithilfe von Platzhaltern und Argumenten Eingaben über die Hauptmethode vorzunehmen.
[Java] Ich möchte die Differenz zum Datum berechnen
Tokoro habe ich in der Migration von Wicket 7 auf 8 umgeschrieben
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
[Rails] Ich weiß nicht, wie ich das Modell verwenden soll ...
Rails6 Ich habe versucht, Docker in eine vorhandene Anwendung einzuführen
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Ich habe Rails Anfänger ausprobiert [Kapitel 1]
Ich habe das FizzBuzz-Problem ausprobiert
Ich habe Rails Anfänger ausprobiert [Kapitel 2]
Ich habe versucht, yum-cron zu verifizieren
Ich habe versucht, innerhalb von 3 Monaten einen Antrag von unerfahren zu stellen
Ich habe versucht, die ähnliche Funktion durch asynchrone Kommunikation zu implementieren
[Rails] Ich habe zum ersten Mal versucht, die button_to-Methode zu verwenden
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit spiritueller Technik zu erhöhen
[Rails] [Bootstrap] Ich möchte die Schriftgröße entsprechend ändern
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Ich habe die grundlegende Grammatik von Ruby kurz zusammengefasst
Ich habe versucht, die Umgebung nach und nach mit Docker aufzubauen
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren
Ich habe versucht, eine Umgebung mit WSL2 + Docker + VSCode zu erstellen
Ich habe versucht, eine Validierung durchzuführen, um zu vereinheitlichen, wie Hash-Tags geschrieben werden
[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen
Was ich aus dem Studium von Rails gelernt habe
Ich habe versucht, C # (Indexer) zu kauen.
Ich habe versucht, die Unterstützung für iOS 14 zusammenzufassen
Ich habe versucht, mit Java zu interagieren