Help us understand the problem. What is going on with this article?

Ruby on Rails for Heroku

More than 3 years have passed since last update.

Rails対応

アプリケーションの作成

rails new <name> -d postgresql

Railsではデフォルトでデータベースにsqlite3を使用するが、
Herokuではデフォルトでpostgresqlを使用するため、
アプリケーションの作成時にpostgresqlを指定しておく。

[参考サイト]
Railsドキュメント

Gemfileにgemを追加し、bundle install

Gemfile
gem 'rails_12factor', group: :production
shell
bundle install

Railsではデフォルトでログ出力先が標準出力になっているが、
Herokuではデフォルトでログ出力にlogplexを使用しており、
標準出力にログが表示されない。

そのため、heroku logsコマンド実行時にRailsのログが表示されず、
heroku logsコマンドを使用した調査が行えないため、
Heroku環境(production)でだけrails_12factorを使用するように指定する。

[参考サイト]
Herokuでアプリケーションのログを出力する

Procfileの追加

Procfile
web: bundle exec rails server -p $PORT

HerokuでWebサーバーをデフォルトのWEBrickで動作させる場合は特になくても問題ない。

ただし、git push heroku master実行時に"Procfileが存在しないため、WEBrickを使用する"というWARNINGメッセージが毎回表示される。
また、後述するWEBrick以外のWebサーバーを使用する場合は必要になる。

Webサーバーの変更

1. thin

Gemfile
gem "thin"
shell
bundle install
Webサーバー起動
rails server thin
Procfile
web: bundle exec rails server thin -p $PORT

[参考サイト]
Herokuのwebサーバをthinに変更する

2. puma

Gemfile
gem "puma"
shell
bundle install
Webサーバー起動
rails server puma
Procfile
web: bundle exec rails server puma -p $PORT

[参考サイト]
pumaを使ってみた

Heroku対応

アカウント作成&SSHキーの登録

Heroku公式サイトからアカウント作成とSSHキーの登録を行う

[参考サイト]
Heroku導入メモ
初心者でも15分で公開できるHerokuのはじめかた

ログイン

heroku login

アカウント作成時に設定したメールアドレスとパスワードを入力

アプリケーションの作成

1. Heroku公式サイトダッシュボードから行う場合

1-1. ダッシュボードからアプリを作成

1-2. RailsとHerokuの紐付け

Herokuダッシュボード上のアプリの設定画面に表示されているGit URL
RailsアプリケーションのGitリモートリポジトリにherokuとして追加

git remote add heroku <HerokuアプリケーションのGit URL>

2. コマンドから行う場合

heroku create <name>

heroku createコマンドでアプリケーションを作成する場合、
自動でHerokuのリモートリポジトリが追加される

Herokuにデプロイ

git push heroku master

確認

heroku open

Webブラウザが開き、自分のアプリケーションのページが表示されたら、成功

エラー

We're sorry, but something went wrong. が表示された場合

1. ログを確認

heroku logs

表示されたログから原因を特定し、修正

Heroku上の環境でコマンドをリモート実行

heroku run <command>

heroku run ruby -vとすることで、Heroku上でruby -vコマンドをリモート実行できる

Heroku上のWebプロセスの状態確認&再起動

プロセスの状態確認
heroku ps
heroku ps:scale web=1
再起動
heroku restart

[参考サイト]
Herokuでウェブプロセスが止まる

buildpackを追加

heroku buildpacks:add <Githubなどで公開されているbuildpackのURL>

gemとして提供されていないバイナリを使用したい時に
buildpack形式で公開されているURLを指定することで、
デプロイ時にHeroku環境に対象のバイナリをインストールできる。

[参考サイト]
Buildpacks

メンテナンス

メンテナンス開始
heroku maintenance:on
メンテナンス終了
heroku maintenance:off
メンテナンスページを自分で用意したページに変更
heroku config:set MAINTENANCE_PAGE_URL=<URL>

Railsアプリケーションで生成したページをメンテナンスページとして表示する場合、
Railsのデフォルト設定ではiframeに表示できない設定になっているため、
config/application.rbに以下の設定が必要になる

config/application.rb
class Application < Rails::Application
  config.action_dispatch.default_headers.delete( "X-Frame-Options" )
end

[参考サイト]
Rails4アプリがiframeで表示されない

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away