I made a rake task that expands on some of the previous answers. I use this a lot in a Vagrant+Docker setup, so I can very easily issue a single command and either create a new database or issue a migrate to the current database. I use a branched database paradigm for development. I constantly need to seed a new database or update my existing one.
In lib/tasks/db_exists.rake:
namespace :db do
desc "Checks to see if the database exists"
task :exists do
begin
Rake::Task['environment'].invoke
ActiveRecord::Base.connection
rescue
exit 1
else
exit 0
end
end
end
So now I can run a simple bash command:
rake db:exists && rake db:migrate || rake db:setup
Which I have then further automated into a Makefile (trimmed for brevity):
.PHONY database
database:
rake db:exists && rake db:migrate || rake db:setup
Translates into:
make database
For all of my local database needs.