RailsアプリをHerokuへデプロイする際につまずいたこととその対処法[メモ]
Rails開発初心者の私が今回RailsアプリをHerokuへデプロイする際につまずいた所とその対処方法を記述します。
開発環境
Rails 5.1.4
Ruby 2.2.7
Herokuのデプロイエラー
必須ではないが古いバージョンが残っている可能性もあるのでHerokuへデプロイする前に一応Gemfile.lockの内容を全て削除して
$ bundle install (または $ bundle update)して更新
git commit -a -m "commit message"でコミット
$ git push heroku master を実行
↑しかしここでエラーが発生
エラー内容は以下
と出ており(まだ下にずらーっとメッセージが出ていたが重要な部分だけ取り出した)
(オレ ニホンジン、エイゴ ムズカシイ...)
対応
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が書かれていないかチェックする。
参考文献