Rails対応
アプリケーションの作成
rails new <name> -d postgresql
Railsではデフォルトでデータベースにsqlite3を使用するが、
Herokuではデフォルトでpostgresqlを使用するため、
アプリケーションの作成時にpostgresqlを指定しておく。[参考サイト]
Railsドキュメント
Gemfileにgemを追加し、bundle install
gem 'rails_12factor', group: :production
bundle install
Railsではデフォルトでログ出力先が標準出力になっているが、
Herokuではデフォルトでログ出力にlogplexを使用しており、
標準出力にログが表示されない。そのため、heroku logsコマンド実行時にRailsのログが表示されず、
heroku logsコマンドを使用した調査が行えないため、
Heroku環境(production)でだけrails_12factorを使用するように指定する。[参考サイト]
Herokuでアプリケーションのログを出力する
Procfileの追加
web: bundle exec rails server -p $PORT
HerokuでWebサーバーをデフォルトのWEBrickで動作させる場合は特になくても問題ない。
ただし、git push heroku master実行時に"Procfileが存在しないため、WEBrickを使用する"というWARNINGメッセージが毎回表示される。
また、後述するWEBrick以外のWebサーバーを使用する場合は必要になる。
Webサーバーの変更
1. thin
gem "thin"
bundle install
rails server thin
web: bundle exec rails server thin -p $PORT
[参考サイト]
Herokuのwebサーバをthinに変更する
2. puma
gem "puma"
bundle install
rails server puma
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に以下の設定が必要になる
class Application < Rails::Application
config.action_dispatch.default_headers.delete( "X-Frame-Options" )
end
[参考サイト]
Rails4アプリがiframeで表示されない