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.
Rails: 6.0.3 Ruby:2.7.1 Macbook Pro Graphviz GraphQL (Dies lag an der automatisch generierten Datei.)
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
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
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)
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!
Da Rails6 x GraphQL verwendet wurde, konnte das Auroload nicht korrekt ausgeführt werden, und der Fehler trat auf.
Recommended Posts