【2020年9月】Rails6アプリをHeroku(本番環境)にデプロイ方法を画像付きで徹底解説

Rails6アプリをHerokuにデプロイする方法(画像付き)

rails6でWebアプリ(devise:会員登録機能とactive admin管理画面)を実装しています。

まぁ、Railsアプリなら基本的にデプロイ方法は変わりません。

Herokuへのデプロイから独自ドメインの追加とSSL化までをメモしておきたいのですが、長くなったので独自ドメインは次回にして、今回はとりあえずHerokuに確実にデプロイだけします。

また、herokuでのdeviseの本番環境メール送信も次回にします。(記事公開済み)

僕自身、めちゃくちゃ時間が掛かって泣きそうだったので、誰かの救いの手になればと思います。

前提条件と目的

  • Ruby on Rails6で事前にWebアプリ制作済み
  • devise(会員登録機能)
  • active admin(管理画面)
  • ここから下は次回の記事で設定していく
  • deviseのメール送信にはSendGridを使用(これは設定してなくてもOK 設定もしたい人は別記事に載せてます
  • 独自ドメイン取得済み(お名前.comで取得 *別にどこで取得しても大丈夫)
  • SSL化する(SSLしてないURLをSSLにリダイレクト)
  • herokuの初期URLを独自ドメインにリダイレクト

自分の環境

  • ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin19]
  • Rails 6.0.3.2
  • git version 2.23.0
  • heroku/7.42.6 darwin-x64 node-v12.16.2

①RailsアプリをHerokuにデプロイする準備

まずは、HerokuにRailsで作ったアプリをデプロイする準備です。

  • config/routes.rbの設定
  • Gemfileの設定
  • config/datebase.ymlの設定
  • config/environments/production.rbの設定
  • bin以下のフォルダの設定(任意)

config/routes.rbの設定

config/routes.rbでトップページに何かしらのページを定義しておきましょう。

これをしないと本番環境(デプロイした後の環境)で「urlが正しく有りません」というエラーになってしまうので注意して下さい。

ローカル環境でアクセスして、ご自身の設定したトップページが表示されていれば問題ありません。

ローカルでアクセスするときはrails sでサーバーを起動しておくことを忘れずに。

http://localhost:3000

Gemfileの設定

Gemfileを変更します。

ここでは、環境ごとのデータベースの変更を行なっています。

ローカル環境では、Railsアプリに最初からついているSQLite3というデータベースを使っていました。

しかし、これからデプロイする予定であるheroku(本番環境)では、PostgreSQL(略してpg)というデータベースが最初からインストールされているので、その環境に合うように変更をしています。

group :development, :test do
  gem 'sqlite3', '~> 1.4' # 開発用(ローカル環境)
end
group :production do
  gem 'pg'  # 本番用ではPostgreSQLを使用する
end

そして、Gemfileを変更したので、ターミナルで忘れずに$ bundle installをしておきましょう。

なお、以下のようにオプションを指定します。

$ bundle install --without production

このオプションをつけることで、group :produciton do~end内以外のgemをインストールすることができます。

自分のパソコンには、PostgreSQLは入っていないため、このようなオプションをつけています。

ちなみに、このオプションは、一度打ち込めば、アプリ内の/bundle/configに書き込まれるため、それ以降は--without producitonなしでも、本番環境以外のgemをインストールしてくれるようになります。

アプリ内の/bundle/configに書き込まれた内容が下記の様になっていれば、OKです。

---
BUNDLE_WITHOUT: "production"

config/datebase.ymlの設定

ここでは、実際にデータベースと接続する記述をしていきます。

その接続の記述をする箇所がconfig/database.ymlというファイルです。

ファイル内の下の方にあるproduction環境の設定を、以下のように変更してください。

ここで注意して欲しいのが、production:以降の記述は必ず 1インデント(半角スペース2個の空白)を開けて記述してください。

.ymlというファイルは、インデントで記述を判別しています。

production:
  <<: *default
  database: db/production.sqlite3

production:
  <<: *default
  adapter: postgresql
  encoding: unicode
  pool: 5
  • adapter: postgresql postgreSQLのデータベースに接続
  • encoding: unicode unicodeという文字コードを使用
  • pool: 5 DBに接続できる上限の数を決める

これで、本番環境でPostgreSQLと接続する準備がほぼ完了です。

config/environments/production.rbの設定

Rails6では、本番環境での動的な画像の表示(プリコンパイル)がデフォルトでオフになっています。

画像を表示するために以下の記述をfalseからtrueに変更します。

この記述があることで、assets以下のフォルダを動的にコンパイルしながらページを読み込みます。

# 本番用 デフォルトでfalseとなっているのでtrueに変更
config.assets.compile = true

bin以下のフォルダの設定

ここの項目は、人によっては何もしなくて良いんですが、rbenvなどを使ってない人がエラーを起こす様なので、参考程度に記載しておきます。(僕の場合、問題なかった)

これまでの設定ができていても、heroku run rails db:migrateができない人は、ここで詰まっている人が多いらしいです。

アプリ内にbinというフォルダのファイル全て(bundle,rails,rake,setup,spring, update,yarnなど)の一番上に下記の様なコメントアウトがあると思います。

#!/usr/bin/env ruby

上記の記述であれば問題ありませんが、ここの記述に

#!/usr/bin/env ruby 2.3.1

という様なバージョン指定が入っているとエラーが起きるそうです。

なので、バージョン指定されてしまっているファイル全てのバージョンを削除してください。(2.3.1の部分だけを削除)

Rails6アプリのデプロイ 準備は完了なので、herokuにデプロイしていく前にgitの準備。 

②Rails6アプリとGitを紐付ける

herokuのデプロイにはgitを使うので、インストールしていない方は、事前にgitの準備をしておきましょう。(gitの導入は割愛)

今のRails6アプリでgitを使うと宣言する

まずは、rails6アプリでgitを使うよっていう宣言をしてあげます。

ただ、このコマンドはアプリを作るごとに最初の一回だけということを覚えておきましょう。

$ git init

下記の様な文が出ていればOKです。

Initialized empty Git repository in /自分のディレクトリ/.git

ソースコードを変更する度に行なうコマンド

$ git add . # 保存するファイルの選択 「.」で全部
$ git commit -m "first commit" # addしたファイルの保存の確定

なお、gitを初めて導入する方は、githubのユーザー名とemailの入力を求められますが、そこの部分は各自で設定しておいて下さい。

git commitしたとき

create mode …がズラッと長々と出てきますが、問題ありません。

処理が終わったらOKです!

③Rails6アプリをHerokuにデプロイする

Rails6アプリでは、デプロイする作業がめんどくさいし、ややこしいし、難しいです…

しかし、herokuを使うことでメチャクチャ簡単にデプロイすることができます!

さらに無料なんですよね。

独自ドメインとか使いたい場合は、有料で月額700円くらい。

とにかく、安いし、herokuだけでWebサービスを運営できます。

Herokuへの登録

まずは、herokuの会員登録(無料)を行いましょう。

英語メインのサイトですが、google翻訳でサイトを見れば大抵のことがわかります。

Herokuに登録する

会員登録が完了後に、herokuを自分のPCに紐付けます。

cliというのをダウンロードするのですが、macかwindowsなどで、方法が異なります。

自分のパソコンによって、変わります。

今回は、僕のパソコンがmacなので、macで進めます。(Windowsの方はこちら

ターミナルで下記コマンドを実行

$ brew tap heroku/brew && brew install heroku

brewコマンドが使えない場合は、Homebrewをインストールする必要があるので「mac Homebrew インストール方法」などと検索して、インストールしておきましょう。

Homebrewは、とにかくメチャクチャ使うので、インストールしておいて損はありません。

「パスを通してください」という指示と以下のコマンドが出るので、コピペして、またターミナルに打ちこみます。

$ echo 'PATH="/usr/local/heroku/bin:$PATH"' >> ~/.profile

gitの時と同じように以下のコマンドを打って、インストールしたバージョンが出てきたらインストールが成功しています。

$ heroku --version
heroku/7.42.6 darwin-x64 node-v12.16.2

ここまで出来たら、いよいよ自分のアプリとherokuを紐づけていきます!

Rails6アプリとHerokuの紐づけ

まずは、コマンドでherokuにログインします。

$ heroku login

そうすると、herokuに登録したemailとpasswordの入力を求められるので、指示された通りに進めて下さい。

Enter your Heroku credentials:
Email: examole@example.com(herokuに登録したメールアドレス)
Password: herokuに登録したパスワード
Logged in as examole@example.com

ログイン出来たら、以下のコマンドで、herokuとアプリを紐づけます。

なお、アプリごとに最初の一回だけで大丈夫です。

$ heroku create 好きなアプリ名 (「好きなアプリ名」に入力する文字列はurlになります。「 _ 」とか使えません)

※「好きなアプリ名」は空欄にしてしまっても自動生成してくれます。

また、ここで生成されたURLはコピペなどして、どこかに残しておきます。

後で、デプロイ後にアクセスするURLになります。

herokuにアプリを新規作成

すでにある名前で作ろうとするとエラーになるので、注意しましょう。

Herokuにデプロイ

次は、ようやくデプロイになります。

ターミナルに以下のコマンドを打ち込んでください。

$ git push heroku master

herokuにデプロイする

この様にデプロイが進んでいくので、しばらく待ちます。

Warningというオレンジの文字が出ていることもありますが、赤い文字でエラーを吐いていない限り大丈夫です。

下記の様に、なれば無事にデプロイ 完了です。

herokuデプロイ完了

最後に以下のコマンドを入力して本番環境でのデータベースをマイグレーションします。

$ heroku run rails db:migrate

これで、デプロイ完了です!!!

先ほどコピーしておいたURLをブラウザのアドレスバーに貼り付けて、確認してブラウザにアクセスできたら終了です。

おまけ:ソースコードを変更した時の本番環境に上書き

アプリの一部を変更したときに本番環境に反映させる方法も一応書いておきます。

ターミナルで下記実行

$ git add .
$ git commit -m "Update app"
$ git push heroku master

テーブル追加や内容変更などをした場合は、データベースを更新します。

$ heroku run rails db:migrate

以上になります。

他にもこんな記事があります!