Search code examples
ruby-on-railsrubymigration

Run a single migration file


Is there an easy way to run a single migration? I don't want to migrate to a certain version I just want to run a specific one.


Solution

  • You can just run the code directly out of the ruby file:

    rails console
    >> require "db/migrate/20090408054532_add_foos.rb"
    >> AddFoos.new.up
    

    Note: Very old versions of rails may require AddFoos.up rather than AddFoos.new.up. If your migration has a "change" method, you need to run AddFoos.new.change.

    An alternative way (without IRB) which relies on the fact that require returns an array of class names:

    script/runner 'require("db/migrate/20090408054532_add_foos.rb").first.constantize.up'
    

    Note that if you do this, it won't update the schema_migrations table, but it seems like that's what you want anyway.

    Additionally, if it can't find the file you may need to use require("./db/..." or try require_relative depending on your working directory