This gem prevents Rails from auto-loading app code while it's running migrations, preventing the common mistake of referencing ActiveRecord models from migration code.
Add good_migrations to your gemfile:
And you're done! That's it.
In general, editing existing migrations is not a good idea. You will be creating extra work for yourself and your co-workers and cause major headaches if the existing version of the migration has already been run on production machines. Instead, you should write a new migration that performs the changes you require.
That means that if your migrations reference the ActiveRecord model objects
you've defined in
app/models, your old migrations are likely to break. That's
By adding this gem to your project's
Gemfile, autoloading paths inside
while running any of the
db:migrate Rake tasks will raise an error, explaining
the dangers inherent.
Some will reply, "who cares if old migrations are broken? I can still run
rake db:setup because I have a
db/schema.rb file". The problem with this approach
is that, so long as some migrations aren't runnable, the
be regenerated from scratch and its veracity can no longer be trusted. In
practice, we've seen numerous projects accumulate cruft in
db/schema.rb as the
result of erroneous commits to work-in-progress migrations, leading to the
development and test databases falling out of sync with production. That's not
For more background, see the last section of this blog post on healthy migration habits
There's no public API to this gem. If you want to work around its behavior, you have a few options:
- Run the command with the env var
requirethe app code you need in your migration
- Remove the gem from your project
Because this gem works by monkey-patching the ActiveSupport auto-loader, it will not work if your Rails environment (development, by default) is configured to eager load your application's classes (see: config.eager_load).