Nous avons résumé comment générer automatiquement des diagrammes ER dans Rails6. Dans le cas de Rails6, Zeitwerk est utilisé par défaut pour le chargement automatique du fichier, mais à cause de cela, le diagramme ER n'a pas pu être généré correctement, donc la solution de contournement est également décrite.
Rails: 6.0.3 Ruby:2.7.1 Macbook Pro Graphviz GraphQL (Cela était dû au fichier généré automatiquement.)
Installez Gem.
Gemfile
group :development do
gem 'rails-erd'
end
Réglez sur gitignore si nécessaire.
.gitignore
*.dot
Vous pouvez générer un diagramme ER avec la commande suivante.
$ bundle exec erd
Pour générer automatiquement un diagramme ER pendant la migration, définissez-le dans Rakefile. Si vous n'avez pas besoin de génération automatique, vous n'avez pas besoin de le mentionner ici.
Rakefile
#Accrochez la tâche de migrer
Rake::Task['db:migrate'].enhance do
if Rails.env.development?
Rake::Task[:after_migrate].invoke
end
end
#Tâches après la migration
task after_migrate: :environment do
Rake::Task[:create_erd].invoke
end
#Créer un diagramme ER
task create_erd: :environment do
# attributes=foreign_keys,primary_keys,timestamps (Les attributs affichent la clé primaire, la clé externe, l'horodatage)
# sort=false (Les noms de colonnes ne sont pas classés par ordre alphabétique)
# filename=loof-api-server-erd (nom de fichier)
# filetype=dot (Extension de fichier)
sh 'bundle exec erd --attributes=foreign_keys,primary_keys,content,timestamps --sort=false --filename=hogehoge --filetype=dot'
end
Lorsque j'ai arrêté d'utiliser zeitwerk, qui charge automatiquement les fichiers, et que je suis passé au classique, j'ai pu le générer automatiquement, mais Rspec n'a pas réussi.
config/application.rb
config.autoloader = :classic
À propos de l'erreur de constante non initialisée XXX (NameError) de zeitwerk [Rails Guide 2 Enable Zeitwerk Mode](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 Without 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)
Lorsque j'ai généré le diagramme ER, j'ai eu l'erreur suivante.
Terminal
$ bundle exec erd
Failed: Zeitwerk::NameError: expected file /app/graphql/interface_types/base_interface.rb to define constant Types::BaseInterface, but didn't
Apparemment, la méthode de définition du module n'est pas appropriée. Comment casser Zeitwerk
La cause était le fichier généré automatiquement par GraphQL, donc je l'ai changé comme suit.
base_interface.rb
module Types
module BaseInterface
include GraphQL::Schema::Interface
field_class Types::BaseField
end
end
Après les mesures ↓
base_interface.rb
module Types::BaseInterface
include GraphQL::Schema::Interface
field_class Types::BaseField
end
Modifiez également d'autres fichiers.
base_scalar.rb
module Types
class BaseScalar < GraphQL::Schema::Scalar
end
end
Après les mesures ↓
base_scalar.rb
class Types::BaseScalar < GraphQL::Schema::Scalar
end
Lorsque j'ai généré à nouveau le diagramme ER, l'erreur suivante est apparue cette fois.
Terminal
$ bundle exec erd
Failed: RuntimeError: Saving diagram failed!
Verify that Graphviz is installed and in your path, or use filetype=dot.
Il est nécessaire de spécifier le fichier comme point.
Terminal(Spécifiez le fichier)
$ bundle exec erd --filetype=dot
Vous avez généré avec succès un diagramme ER!
Puisque Rails6 x GraphQL a été utilisé, l'auroload n'a pas pu être effectué correctement et l'erreur s'est produite.
Recommended Posts