Ruby
Heroku
Gem
Gemfile
Rails5

初心者がHerokuでRails アプリを公開する時にGemfileが原因でmigrateできない問題の解決策

前提

この記事を公開した時の環境を以下に示します。

使用言語 バージョン
Ruby 2.4.0
Ruby on Rails 5.1.4

Railsアプリをローカル環境で作ったのに一般への公開方法がわからない方へ

おそらくですがRailsアプリを作ってから次にぶつかる壁はどうすれば一般の人がアクセスできるようなURLを発行すれば良いのかわからなくパターンだと思います(僕も実際そうでした)。

そのような方はまずHerokuなどのサービスを利用すれば良いと思います。
Herokuのアカウントを作成してあとはMacであればターミナルなどを用いて必要なコマンドを打っていき、自分のパソコン内にあるファイルを公開し、アプリを外部からアクセス可能にしましょう。

詳しくは
https://techacademy.jp/magazine/6401
の記事などを参考にすると良いと思います。

この記事はその過程で起きた問題を解決するための記事です。

Gemfileが原因でマイグレイトできない!!

アプリを公開するためにターミナルで

$ git push heroku master

と入力した後

$ heroku run rails db:migrate

と打つと

rails 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). 
Add `gem 'pg'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
、
、
、
(中略)
、
、
Caused by:
Gem::LoadError: can't activate pg (~> 0.18), already activated pg-1.0.0. 
Make sure all dependencies are added to Gemfile.
、
、
、
(略)

このようなエラーが表示されるのでGemfile内の設定がPostgreSQLになってないのが原因でこのエラーが出るようです。
したがってGemfile内の

gem 'sqlite3'

gem 'pg'

に変えて再度

$ heroku run rails db:migrate

としても同じエラーがでる、、、
なぜだ、、、

解決策

こうなってしまう原因はちゃんと変更が反映されてないことにあります。

Gemfileを変えた後、直接マイグレーションするのではなく、

$ bundle install

して

$ git init
$ git add .
$ git commit -m "Change Gemfile"

と入力した後

$ git push heroku master
$ heroku run rails db:migrate

すればうまくいくと思います!

記事内で間違っている箇所があったり、質問があれば遠慮なくコメントしてください!!