How to Remove Old Database Migrations in Ruby on Rails
Rails data migration should be performed in accordance with some rules, tips and notes, so that you won’t need ages to finish it. This is all the more important when you are tasked with creating a clear development environment setup, and removing old records is key. Check how we did that when we overtook one of the Ruby projects.

Recently we’ve overtaken a big project for maintenance and further development. It’s a Rails application with many models, controllers and of course lots of database migrations. There were about one hundred files in db/migrate directory. The question is: how can we setup development environment with current database structure? Running rake db:migrate
would just be a suicide. It won’t simply work, because these migrations were written long time ago and the current code and models implementation don’t fit them. Instead let’s load schema.rb
file using this command:
tsx
It will create all needed tables for models and also a special table schema_migrations
to track migrations. Selecting all rows you will see something like this:
tsx
So, how can we use this special table to get rid of smelly migration files?
The solution
We can just create new migration and copy all add/create statements from schema.rb
tsx
The migration can look like this:
tsx
Then we need to change it a little bit, because we don’t won’t to lose any data while deploying new migration to staging or/and production environment. Just remove force: true
option to make sure we will never lose any data by recreating tables. So let’s try to run this new migration:
tsx
Yes, well, it didn’t work, because we’ve already loaded schema.rb
and all our tables are already there. So what can we do? We can use the latest version of migration from our schema_migrations
and rename the new one:
tsx
Finally, we can remove all migrations excluding the current one:
tsx
Now, if we run db:migrate
we won’t see any results or errors because we’ve have already migrated the database. However, if we have to setup a new environment we can run all (one) our migrations without any problems.
What’s left?
There is a small problem with this solution. If you have migrations which are modifying data like adding admin account or so, you need to find them manually and copy the code to our structure migration or add a new migration. The data is not included in schema.rb
Ending…
We just removed all migrations by adding new one with the whole structure. We can now continue hacking and adding new migrations in normal way. Above steps can be repeated any time we want. So, you can keep small number of migrations. Just be careful when you have new migrations on your local branch, but they are not deployed to staging or production yet. It won’t work. You need too rollback your local migrations until it matches staging/production and then copy schema.rb
Thanks all for now. Thank you and bye :)
Let’s Create a Great Website Together
We'll shape your web platform the way you win it!
More posts in this category
February 05, 2025 • 10 min read
READ MORELearn more about api first cmsAPI-first CMS: What Options You Have (Web Dev Agency's Take)
According to the 2024 State of the API Report by Postman, 74% of organizations are adopting API-first strategies. This statistic isn’t just impressive—it signals a major shift in how businesses operate. While API-first approaches have long been a staple in software development, they're now reshaping content management as well. More and more companies are realizing that traditional CMS platforms can't keep up with the demand for flexibility, speed, and seamless integrations.
January 23, 2025 • 15 min read
READ MORELearn more about best cms for saas top cloud based solutionsBest CMS for SaaS: Top Cloud-Based Solutions
Choosing the right Content Management System (CMS) is a critical decision for your SaaS business. Your unique needs require solutions that are not only flexible, scalable, and user-friendly but also tailored to meet the demands of a fast-paced, customer-focused industry. A CMS should simplify your workflows and help you deliver personalized, high-quality digital experiences.
December 12, 2024 • 10 min read
READ MORELearn more about headless cms for vueWe Picked the Best (Headless) CMS for Vue
Picture a digital experience where content effortlessly flows across platforms, development is agile, and performance is unmatched. By combining the power of Vue.js, a progressive JavaScript framework, with a modern headless CMS, you can achieve all this and more.