[RUBY] So generieren Sie automatisch ein ER-Diagramm bei der Migration mit Rails 6

Einführung

Wir haben zusammengefasst, wie ER-Diagramme in Rails6 automatisch generiert werden. Im Fall von Rails6 wird Zeitwerk standardmäßig zum automatischen Laden von Dateien verwendet. Aus diesem Grund konnte das ER-Diagramm nicht erfolgreich generiert werden, sodass auch die Problemumgehung beschrieben wird.

Entwicklungsumgebung

Rails: 6.0.3 Ruby:2.7.1 Macbook Pro Graphviz GraphQL (Dies lag an der automatisch generierten Datei.)

ER-Diagrammeinstellungen

Installieren Sie Gem.

Gemfile


group :development do
  gem 'rails-erd'
end

Bei Bedarf auf gitignore einstellen.

.gitignore


*.dot

Mit dem folgenden Befehl können Sie ein ER-Diagramm erstellen.

$ bundle exec erd

Automatisch generierte Einstellungen

Um während der Migration automatisch ein ER-Diagramm zu erstellen, legen Sie es in Rakefile fest. Wenn Sie keine automatische Generierung benötigen, müssen Sie diese hier nicht erwähnen.

Rakefile


#Haken Sie die Aufgabe der Migration ein
Rake::Task['db:migrate'].enhance do
  if Rails.env.development?
    Rake::Task[:after_migrate].invoke
  end
end

#Aufgaben nach der Migration
task after_migrate: :environment do
  Rake::Task[:create_erd].invoke
end

#ER-Diagramm erstellen
task create_erd: :environment do
  # attributes=foreign_keys,primary_keys,timestamps (Attribute zeigen Primärschlüssel, externen Schlüssel und Zeitstempel an)
  # sort=false (Spaltennamen sind nicht in alphabetischer Reihenfolge)
  # filename=loof-api-server-erd (Dateiname)
  # filetype=dot (Dateierweiterung)
  sh 'bundle exec erd --attributes=foreign_keys,primary_keys,content,timestamps --sort=false --filename=hogehoge --filetype=dot'
end

Fehler Gegenmaßnahmen

Nicht empfohlene Maßnahmen

Als ich aufhörte, zeitwerk zu verwenden, das Dateien automatisch lädt, und auf classic umstellte, konnte ich es automatisch generieren, aber Rspec hat nicht bestanden.

config/application.rb


config.autoloader = :classic

Über den nicht initialisierten Konstanten XXX (NameError) -Fehler von zeitwerk [Rails Guide 2 Zeitwerk-Modus aktivieren](https://railsguides.jp/autoloading_and_reloading_constants.html#zeitwerk%E3%83%A2%E3%83%BC%E3%83%89%E3%82%92% E6% 9C% 89% E5% 8A% B9% E3% 81% AB% E3% 81% 99% E3% 82% 8B) [Rails Guide 11 ohne Zeitwerk](https://railsguides.jp/autoloading_and_reloading_constants.html#zeitwerk%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%AA%E3 % 81% 84% E5% A0% B4% E5% 90% 88)

Maße genommen

Beim Generieren des ER-Diagramms wurde der folgende Fehler angezeigt.

Terminal


$ bundle exec erd
Failed: Zeitwerk::NameError: expected file /app/graphql/interface_types/base_interface.rb to define constant Types::BaseInterface, but didn't

Anscheinend ist die Methode zur Definition des Moduls nicht angemessen. Wie man Zeitwerk bricht

Die Ursache war die von GraphQL automatisch generierte Datei, daher habe ich sie wie folgt geändert.

base_interface.rb


module Types
  module BaseInterface
    include GraphQL::Schema::Interface
    field_class Types::BaseField 
  end 
end

Nach Maßnahmen ↓

base_interface.rb


module Types::BaseInterface
  include GraphQL::Schema::Interface
  field_class Types::BaseField
end

Ändern Sie auch andere Dateien.

base_scalar.rb


module Types
  class BaseScalar < GraphQL::Schema::Scalar
  end
end

Nach Maßnahmen ↓

base_scalar.rb


class Types::BaseScalar < GraphQL::Schema::Scalar
end

Als ich das ER-Diagramm erneut generierte, trat diesmal der folgende Fehler auf.

Terminal


$ bundle exec erd
Failed: RuntimeError: Saving diagram failed!
Verify that Graphviz is installed and in your path, or use filetype=dot.

Es ist notwendig, die Datei als Punkt anzugeben.

Terminal(Datei angeben)


$ bundle exec erd --filetype=dot

Sie haben erfolgreich ein ER-Diagramm erstellt!

Am Ende

Da Rails6 x GraphQL verwendet wurde, konnte das Auroload nicht korrekt ausgeführt werden, und der Fehler trat auf.

Recommended Posts

So generieren Sie automatisch ein ER-Diagramm bei der Migration mit Rails 6
So generieren Sie manuell ein JWT mit Knock in Rails
Festlegen von Umgebungsvariablen bei Verwendung von Payjp mit Rails
So geben Sie db beim Erstellen einer App mit Rails an
So beheben Sie Fehler, die während der Installation von Rails 5.1.3 auftreten
So erstellen Sie eine Rails 6-Umgebung mit Docker
[Rails] Wie schreibe ich, wenn ich eine Unterabfrage mache?
So erstellen Sie eine API mit GraphQL und Rails
[Rails] So erstellen Sie eine Umgebung mit Docker
So generieren Sie automatisch einen Konstruktor in Eclipse
Wie schreibe ich Rails
So deinstallieren Sie Rails
So pushen Sie mit Rails entwickelte Apps an Github
So löschen Sie ein mit Rails erstelltes new_record-Objekt
Automatische Bereitstellung in WildFly mit Jenkins, wenn SVN festschreibt
[So fügen Sie ein Video mit Rails in haml ein]
[Rails] Umgang mit URL-Änderungen nach dem Rendern
Abfragen von Arrays in jsonb mit Rails + postgres
[Rails] Lösung, wenn bei Verwendung von Capybara mit Rspec der Fehler "undefined method` visit '" angezeigt wird
[Schienen] Wie poste ich Bilder?
[Rails] Verwendung von Enum
[Rails] Verwendung von Enum
Wie man Schienenrouten liest
[Einfach] So formatieren Sie Ruby erb-Dateien automatisch mit vsCode
[Mit Backtricks] So stellen Sie React to the simple Rails vor
Verwendung von Rails Join
Wie man mit html.erb nummeriert (nummeriert)
So aktualisieren Sie mit activerecord-import
Schreiben und Notizen bei der Migration von VB zu JAVA
So beenden Sie den Rails-Server
Wie schreibe ich Rails Seed
[Rails] Verwendung der Validierung
[Schienen] So deaktivieren Sie Turbolinks
[Rails] So verwenden Sie authenticate_user!
[Rails] So implementieren Sie Scraping
[Schienen] Wie man Samen macht
Wie schreibe ich Rails Routing
[Rails] So installieren Sie simple_calendar
[Rails] So installieren Sie reCAPTCHA
[Schienen] Verwendung von Scope
[Rails / RSpec] Der Umgang mit Elementen weist einen Größenfehler von Null auf
Ist es möglich, Getter / Setter automatisch mit Java Interface zu generieren?
[Rails] Wie man Kaminari mit Slim einführt und das Design ändert
So installieren Sie Pry nach dem Erstellen einer Rails-Entwicklungsumgebung mit Docker
[Rails] So vermeiden Sie "Verwenden Sie die Syntax von Hash-Raketen", wenn Sie Rubocop ausführen
Wovon ich süchtig war, als ich die Google-Authentifizierung mit Rails implementierte