You've learned a lot about how to build a Rails application over the last few weeks. Now let's 'go public' and share our apps with the world!
- ga-wdi-boston/rails-api
- ga-wdi-boston/rails-activerecord-crud
- This guide assumes you have followed these installation instructions unequivocally.
- Create a repository on github for your project.
- Create a Heroku app from the command line.
- Push the latest code to Heroku.
- Migrate the production database.
- Open an issue on this repository, with the url to your deployed heroku app.
Before you can begin deploying your applications to Heroku, there are some things you'll need to do first.
- Create a github repository for your project, at Create a repo.
- Create a Heroku account, at Create a Heroku Account. You will be sent an activation email, so be sure to check your inbox so that you can activate your account.
- Install the Heroku Command Line Tools: run
brew install heroku
. - Log into Heroku by running
heroku login
from the console and providing your Heroku credentials when asked. Once you log in, if you're prompted to add these credentials to your keychain, say yes. You will not be able to see your password
Now you're set up to use Heroku. To deploy a new application to Heroku:
- Run
heroku create
in the command line in the root of your Rails API to create a new (blank) app on Heroku. - Push your latest code to Heroku (
git push heroku master
) - Update your heroku database by telling Heroku to run your migration files (
heroku run rake db:migrate
). If you have any other rake tasks that need to run (e.g.rake db:seed
), run those withheroku run
as well. - Set your secrets. (Either by using the command line or by using the heroku app panel in your browser)
- Check your work by restarting heroku and opening your heroku application.
Let's look at each of these steps in detail.
Go to the root of your repo and run heroku create
. This will create an
autogenerated name for your app, and add a new remote repository to your repo
called heroku. View your remotes by typing git remote -v
. You should see
something like:
heroku [email protected]:agile-badlands-7658.git (fetch)
heroku [email protected]:agile-badlands-7658.git (push)
origin [email protected]:tdyer/wdi_4_rails_hw_tdd_hacker_news.git (fetch)
origin [email protected]:tdyer/wdi_4_rails_hw_tdd_hacker_news.git (push)
Only keep clean, working code on master
. After you complete a feature merge it
onto master
. Push your updated master
to GitHub, then to Heroku.
git checkout master
git merge my-feature # merge your working code
git push # update GitHub
git push heroku master # update heroku
Once you've deployed your code, you can safely run new migrations. You'll need to do this step every time you have new migrations.
heroku run rake db:migrate
If you have seeds or examples, or if you've updated seeds or examples, you should also run them on heroku.
heroku run rake db:seed
heroku run rake db:examples
Set your environmental variables in your heroku app.
heroku config:set SECRET_KEY_BASE=$(rake secret)
heroku config:set SECRET_TOKEN=$(rake secret)
heroku config:set CLIENT_ORIGIN=https://yourgithubname.github.io
Restart your application and check it out in the browser.
heroku restart
heroku open
You'll probably see something like this:
That's normal, unless you have defined a root route.
If you wish you can rename your app at any time. It must be unique across all apps deployed to heroku.
heroku apps:rename newname
Your app will become immediately available at it's new subdomain,
newname.herokuapp.com
.
- Open an issue on this repository here
- Include the deployed URL of your heroku app in the description.
A full list of Heroku commands can be access by running heroku --help
; below
are some of the more common ones.
Commands | Behavior |
---|---|
heroku apps:info |
Get info about ALL of our Heroku apps. |
heroku apps:info --app {name_of_app} |
Get info about a specific Heroku app. |
heroku apps:open --app {name_of_app} |
Open any given Heroku app (other than the one we're currently working with.) |
heroku logs |
Logs from the currently running app. |
heroku ps |
Processes running in your heroku application. |
heroku releases |
Each time you deploy to heroku you are creating a "release". This command shows all releases. |
heroku pg:info |
Access Postgres from within Heroku and show the heroku plan, connections, pg version, data size, tables. |
heroku pg:psql |
... and open a psql console. |
heroku run ... |
Run a program from within Heroku. |
heroku config |
Environmental variables in your current Heroku app. |
heroku config:set SECRET_KEY_BASE=$(rake secret) |
Set Secret Key |
heroku config:set SECRET_TOKEN=$(rake secret) |
Set TOKEN |
heroku config:set CLIENT_ORIGIN=https://yourgithubname.github.io |
Set CLIENT_ORIGIN |
heroku apps:rename newname (optional) |
Rename heroku app name (entirely optional) |
heroku restart |
restart heroku |
heroku open |
Open your heroku app in default browser |
heroku --help |
Displays a heroku CLI usage summary. |
One serious limitation of Heroku is that it provides an 'ephemeral filesystem'; in other words, if you try to save a new file inside the repo (e.g. an uploaded image file), it will disappear when your app is restarted or redeployed.
As an example, try running the following commands:
heroku run bash
touch happy.txt; echo 'is happy' > happy.txt
cat happy.txt
Then, hit Ctrl-D to get out of heroku bash shell. If you re-open the shell and
run ls -l
, happy.txt
will be missing!
The typical workaround is to save files in cloud storage such as Amazon S3; more on this in the near future.
These are the commands required for deploying to heroku with rails. If your heroku deployment isn't working as expected, review these steps carefully.
heroku create
git push heroku master
heroku run rake db:migrate
heroku run rake db:seed
heroku config:set SECRET_KEY_BASE=$(rake secret)
heroku config:set SECRET_TOKEN=$(rake secret)
heroku config:set CLIENT_ORIGIN=https://yourgithubname.github.io
heroku apps:rename newname
(optional)heroku restart
heroku open
- All content is licensed under a CCBYNCSA 4.0 license.
- All software code is licensed under GNU GPLv3. For commercial use or alternative licensing, please contact [email protected].