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). ).
Ruby 2.5.1 Rails 5.0.7.2
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.
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
terminal
#Führen Sie im Verzeichnis der entsprechenden App aus
$ bundle update -g development -g test
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
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
Ä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
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
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
~
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
~
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.
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").
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.
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 ...
secret.yml
so lassen, wie es istRecommended Posts