Blocking migration creation in Rails
We have a project that accesses a shared database. To prevent problems (and confusion) we wanted to block the creation of migrations in the “secondary” applications so that there was one authoritative place for migrations to live.
It’s easy to accomplish in a simple way.
If you’ve never made any migrations in the secondary application, just do this:
$ echo "NOTE Please do not make migrations in this project. They should all live in _primary app_." > db/migrate
That way, when you run rails g migration foo
, you’ll get this:
$ rails g migration foo
invoke active_record
create db/migrate/20111129162804_foo.rb
[...]/ruby-1.9.2-p180/lib/ruby/1.9.1/fileutils.rb:243:in `mkdir': File exists - [...]/db/migrate (Errno::EEXIST)
When you try to cd
into that directory, you’ll get this:
$ cd db/migrate
bash: cd: db/migrate: Not a directory
After you get over the initial “wha?” reaction, you’ll look at db/migrate
and see the message:
$ cat db/migrate
NOTE Please do not make migrations in this project. They should all live in _primary app_.
Pretty nice, right?