Rails開発初心者の私が今回RailsアプリをHerokuへデプロイする際につまずいた所とその対応を記述します。
開発環境
Rails 5.1.4
Ruby 2.2.7
Herokuのデプロイエラー
必須ではないが古いバージョンが残っている可能性もあるのでHerokuへデプロイする前に一応Gemfile.lockの内容を全て削除する。
$ bundle
して更新
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: ポート番号
username: ENV['DATABASE_USER']
host: ホスト名
database: データベース
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"
でコミット。
もう一度デプロイ → エラー発生!
エラー内容は以下のように先ほどと同じ
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の修正
Gemfilelのgem 'pg'が記述されている部分に問題があるみたいなので見てみる。ActiveRecord から要求されるバージョンが最低限必要みたいなので比較的新しいバージョンを追加。
group :production do
gem 'pg', '0.19.0'
gem 'rails_12factor', '0.0.2'
end
再度デプロイ
念のため過去の設定が残ってるとエラーの元になるかもしれないのでGemfile.lockの内容を全て削除。
Gemfile.lockの内容を頻繁に削除するのは不具合の原因になる恐れがあるので頻繁にやらない。
$ bundle
して
$ 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が書かれていないかチェックする。