Deploying a Rails App to Heroku
Playing around with your homemade apps in a local environment is fun, but what happens when you want to share what you’ve made? Deploy to Heroku. The process is fairly straightforward, and the official guide is a great resource.
The default database for a new Rails app is SQLite. But Heroku only uses PostgreSQL (for reasons explained here). Since I initially built with app with the default database, I first needed to convert manually to PostgreSQL.
Caveat: If you just have some dummy data in your database, then this simple method should work just fine. On the other hand, if you need to be absolutely sure you can preserve your data correctly, I recommend this Stack Overflow post.
First, in my Gemfile I removed the gem
sqlite3 and replaced it with
pg, and ran
Next, I edited
config/database.yml. If you started with default SQLite it should look something like this:
default: &default adapter: sqlite3 pool: 5 timeout: 5000 development: <<: *default database: db/development.sqlite3 test: <<: *default database: db/test.sqlite3 production: <<: *default database: db/production.sqlite3
Change the adapter to
postgresql. Rename the databases. Now it should look more like this:
default: &default adapter: postgresql pool: 5 timeout: 5000 development: <<: *default database: db/hb_development test: <<: *default database: db/hb_test production: <<: *default database: db/hb_production
Make sure Postgres is running on your local machine. If you’re on a Mac, just doubleclick the Postgres app like it’s any normal app, and it will run in the background.
rake db:setup and
rake db:migrate. Tada!
Heroku requires the
rails_12factor gem to be placed in the production group of your Gemfile. Be sure to run
bundle install after adding it! This will “enable features such as static asset serving and logging on Heroku,” according to the official docs.
It’s also a good idea to specify which version of Ruby you’re using at the end of the Gemfile, e.g.
Make sure you have a Heroku account and you’ve installed the Heroku toolbelt. Log in from your command shell with
heroku login. Heroku relies on git for deploying, so be sure you’ve commited your latest changes in git.
heroku create from your app’s home directory. Now a new remote has been added! You can push up your code with
git push heroku master.
Finally, set up and migrate the database:
heroky run rake db:setup then
heroku run rake db:migrate. You’ll notice these look like normal rake commands, but prefaced with
heroku run. Anything starting with
heroku run will be executed on a Heroku dyno, explained here.
Want to see it live in your browser? Type