Heroku is a great PaaS, it let you deploy an app in seconds, almost everything is automated. By default your app will use Heroku shared database, a Postgres db instance which is a perfect choice for development environments but you just can’t use it in production (just take a look at Heroku status blog to get an idea).
A cheap alternative is Amazon Relational Database Service (RDS). It offers MySQL instances at competitive prices.
To make this service available to your Heroku application you should create a new database instance at Amazon RDS and then enable this resource by adding the relative add-on.
Keep in mind that Heroku dynos are Amazon EC2 instances and should be situated in US-East zone so making a RDS instance in the same zone leads to an optimal communication speed between app server and db server.
Create an RDS database instance, you can do it using web based Amazon RDS console.
Migrate your data from Heroku shared database to your new Amazon RDS database instance.
You’ll need to aythorize access to the RDS instance from your workstation running:
$ rds-authorize-db-security-group-ingress default --cidr-ip 18.104.22.168/32
where 22.214.171.124/32 is your public IP subnet.
Now you can use
taps to pull from your Heroku database to your RDS database:
$ heroku db:pull mysql://user:firstname.lastname@example.org/databasename
Authorize Heroku app access to RDS database
$ rds-authorize-db-security-group-ingress --db-security-group-name default \ --ec2-security-group-name default \ --ec2-security-group-owner-id 098166147350 \ --aws-credential-file ../credential-file-path.template
Add Amazon RDS Heroku add-on
$ heroku addons:add amazon_rds url=mysql2://user:email@example.com/databasename
If you get
Taps Load Error: no such file to load -- taps/operation error at “Step 2” no worries, just install
taps on your system by running
$ gem install taps
Remember also to update your app’s
Gemfile configuration to load
mysql2 gem instead of
pg changing from