68
67

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-06-06

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:

68
67
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
67

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?