From ca4358b5da1cbbd7609adf576bcb8874cb0abead Mon Sep 17 00:00:00 2001 From: Steve Polito Date: Mon, 5 Jan 2026 10:02:35 -0500 Subject: [PATCH] Rails: Improve guidance on development environment seed data Closes #779 In practice I found that Rails was autoloading `lib/tasks/development.rake`, which originally called `abort`. This meant the application failed to boot. This would happen if the application was using [Tailwind CSS for Rails][tailwind], since that requires calling `bin/rails tailwindcss:watch`, which loads all tasks. Additionally, this commit makes a change to the task such that global seed data is loaded too. These changes are being used in Suspenders. [tailwind]: https://github.com/rails/tailwindcss-rails --- rails/how-to/seed-data.md | 40 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/rails/how-to/seed-data.md b/rails/how-to/seed-data.md index 91470d81..7abb3ee4 100644 --- a/rails/how-to/seed-data.md +++ b/rails/how-to/seed-data.md @@ -3,22 +3,20 @@ ```ruby # lib/development/seeder.rb -require "factory_bot" - module Development class Seeder - include FactoryBot::Syntax::Methods - def self.load_seeds - new.load_seeds + if Rails.env.development? + new.load_seeds + else + raise "Development::Seeder can only be run in a development environment." + end end def load_seeds - emails = %w[ralph@example.com ruby@example.com] - - emails.each do |email| - create(:user, email:, password: "password") unless User.exists?(email:) - end + # ["Ruby", "Ralph"].each do |name| + # User.find_or_create_by!(name:) + # end end end end @@ -27,18 +25,18 @@ end ```rb # lib/tasks/development.rake -abort "Seeds can only be loaded in local environments" unless Rails.env.local? - -namespace :development do - namespace :db do - desc "Loads seed data into development." - task seed: :environment do - Development::Seeder.load_seeds - end +if Rails.env.development? + namespace :development do + namespace :db do + desc "Loads seed data into development." + task seed: ["environment", "db:seed"] do + Development::Seeder.load_seeds + end - namespace :seed do - desc "Truncate tables of each database for development and loads seed data." - task replant: [ "environment", "db:truncate_all", "development:db:seed" ] + namespace :seed do + desc "Truncate tables of each database for development and loads seed data." + task replant: ["environment", "db:truncate_all", "development:db:seed"] + end end end end