Heroku does NOT work with MySQL databases, as everybody knows. But some people, like myself, prefer to have a single database server in his local development environment. And in my case, and in the cases of many others, this database server is a MySQL server.
In fact, I prefer not having PostgreSQL installed in my development environment. Nothing against this database, but I've been working with MySQL for a long time and my development machine is not a state-of-art notebook, but an old Dell Vostro who has seen better days in its life. Installing many database servers with my Fedora 22 would only damage its performance.
How may I, then, use Heroku for deployment?
First of all, create your app using
$ rails new your_app_name -d postgresql
This will generate a Gemfile and a config/database.yml ready to use PostgreSQL.
Now edit your Gemfile and write the following:
group :development, :test do
group :production do
gem 'pg', '~> 0.15'
This will separate things. MySQL will be used for development and test, in your local machine, while PostgreSQL will be used for production at Heroku. This platform sets RAILS_ENV to production, then this will do the magic for a now. But this is not enough.
Now edit your config/database.yml.
Having created it as said above, you'll have a few lines saying:
# For details on connection pooling, see rails configuration guide
Don't touch this! Let it be exactly as it is.
Now, right below this you may have your settings for the development environment. Replace them with:
And do the same for your test environment:
Now you run
$ bundle install
$ git add .
$ git commit -m "Heroku"
$ git push heroku master
and you are ready!
Now Heroku will accept your deploy and your app will work fine. Maybe you'll just need to run some rake tasks to generate your database and migrate it. I'll teach you to do this in the next article, just in case you don't know.
By the way... You surely noticed the gem rails_12factor installed in production environment. Heroku requires it and it is better to add it to your production environment whenever you are going to use this platform.