RailsアプリをHerokuへデプロイする際につまずいたこととその対処法[メモ]

Rails開発初心者の私が今回RailsアプリをHerokuへデプロイする際につまずいた所とその対処方法を記述します。

 

開発環境

Rails 5.1.4

Ruby 2.2.7

MacOS Sierra

 

Herokuのデプロイエラー

必須ではないが古いバージョンが残っている可能性もあるのでHerokuへデプロイする前に一応Gemfile.lockの内容を全て削除して

 

$ bundle install (または $ bundle update)して更新

 

git commit -a -m "commit message"でコミット

 

$ git push heroku master を実行

↑しかしここでエラーが発生

 

エラー内容は以下

rake aborted!

Gem::LoadError: Specified 'postgresql' for database adapter, but the gem is not loaded. Add `gem 'pg'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).

 と出ており(まだ下にずらーっとメッセージが出ていたが重要な部分だけ取り出した)

 

(オレ ニホンジン、エイゴ ムズカシイ...)

 

対応

Gemfileの確認

Gemfileを開いて

gem 'sqlite3'が:developmentと:test環境向けに設定(記述)されているかを確認

Herokuに最適なgem 'pg'(PostgreSQL)が:production環境向けに設定(記述)されているかを確認

group :production do
    gem 'pg'
    gem 'rails_12factor', '0.0.2'
end 

 

database.ymlの確認

DBのYAMLファイルの設定(記述)がされていなかったのでconfig/database.yml を開いて

production:の部分を以下に変更

# SQLite version 3.x
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
#

<<省略>>

production:
     encoding: utf8
     adapter: postgresql
     port: 5432
     username: ENV['DATABASE_USER']
     host: ec2-107-20-204-179.compute-1.amazonaws.com
     database: db0fbhqibf5dri
     password: ENV['DATABASE_PASSWORD']

 

※(Heroku Add-ons Data StoresのHeroku Postgresがインストールされている事を前提として)データベース名やユーザー名などの情報を見るにはWeb上でHerokuにログインし、アプリを選択、Resourcesをクリック、Add-onsのHeroku Postgres :: Databaseをクリック、Settingsをクリック、Database Credentialsの横にあるView Credentials...をクリックすると出てきます

 

変更が終わったら $ git commit -a -m "commit message" でコミット

もう一度デプロイ → エラー発生!

 

Gemfileの修正

先ほどと同じ

rake aborted!

Gem::LoadError: Specified 'postgresql' for database adapter, but the gem is not loaded. Add `gem 'pg'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).

なんとなくGemfilelに問題があるとエラーメッセージ君が言っているので見てみた

group :production do
    gem 'pg'
    gem 'rails_12factor', '0.0.2'
end 

ActiveRecord から要求されるバージョンが最低限必要みたいなので比較的新しいバージョンを追加

group :production do
    gem 'pg', '0.19.0'
    gem 'rails_12factor', '0.0.2'
end 

 

再度デプロイ

念のため過去の設定が残ってるとエラーの元になるかもしれないのでGemfile.lockの内容を全て削除

 

$ bundle install (または $ bundle update)して

 

$ git commit -a -m "commit message" でコミット

 

$ git push heroku master でHerokuにデプロイ → デプロイ成功!

 

$ heroku run rake db:migrateでHerokuのDBをマイグレーション

 

$ heroku open でブラウザに表示された!

 

まとめ

  •  デプロイエラーが出た際にまずはGemfileに設定(記述)の不足がないかを確認する。
  • config/database.yml内のproduction:設定(記述)に不足や間違いがないか確認する。
  • デプロイエラーが出続けている際はGemfile.lockの内容を思い切って全て削除し、$ bundle installで様子を見てみる。(あまりオススメしない)
  • HerokuにHeroku PostgreSQLをインストールする事を忘れない。
  • 本記事では記述しなかったが.git/config内[remote "heroku"]内のURLに昔の古いリポジトリのURLが書かれていないかチェックする。

 

参考文献

qiita.com

 

togattti.hateblo.jp