Edited at

Rails アプリを初めて Heroku にデプロイしてエラーとなったとき

Railsアプリを何も変更せずにそのままHerokuにデプロイすると、

fbc59e74e14d9d16dcec306415606f88.png

こんなエラーが来ます。


原因は主に2つ。


  1. データベースをSQLite3からPostgreSQLに変えていない。

  2. デプロイ後、heroku run rake db:migrate を実行していない。

  3. 他の原因。(Gemなど)

ここでは1.の場合の対処法を書いていきます。


RailsアプリはそのままHerokuにデプロイしても動きません。


  • Railsの標準データベースは SQLite

  • Herokuのデータベースは PostgreSQL

以下の手順で、先に本番環境のデータベースをSQLiteをPostgreSQLに変えないといけないのです。


1. /Gemfile を書き換える

変更前


/Gemfile

# Use sqlite3 as the database for Active Record

gem 'sqlite3'

変更後


/Gemfile

# 開発環境(ローカル)ではSQLite3を使用

gem 'sqlite3', group: :development

# 本番環境(heroku)ではPostgreSQLを使用
gem 'pg', group: :production


変更後、以下のコマンドをたたいて、gemをインストール

$ bundle install

これで、本番環境(Heroku)でPostgreSQLが使えるようになります。


2. /config/database.yml を書き換える

productionの項目を下記のように変更する


/config/database.yml

production:

<<: *default
adapter: postgresql
encoding: unicode
pool: 5

# インデントは必ず半角スペース2つ


これで、本番環境(Heroku)で使用するデータベースをPostgreSQLに設定しました。


3. デプロイ


前提


  • Heroku アカウント取得済み


  • Heroku CLI インストール済み


  • Git インストール済み

# アプリのディレクトリに移動

$ cd your_project_path

# Heroku CLI にログイン (初回のみ)
$ heroku login

# 新規Herokuアプリの作成 (作成済みの場合は省略)
$ heroku create your-app-name

# 変更のコミット

$ git add .
$ git commit -m "Add pg gem for Heroku"

# リポジトリのプッシュ (アプリのデプロイ)
$ git push heroku master

# データベースのマイクレーションを行う (Heroku上のデータベースを起動)

$ heroku run rake db:migrate

# ブラウザーでHerokuアプリを開く
$ heroku open

これでアプリは http://your-app-name.herokuapp.com で動いているはず。

動いていたら乾杯!:beers: