Railsチュートリアル Herokuへデプロイ時 sqlite3とpgのエラーの記録

Railsチュートリアル2章の初っ端、Herokuにデプロイしようとしたらsqlite3とPostgresql関連でエラー文が…

 

自分の出したエラーと対処(というか回避)の記録。

手順:チュートリアル通りGemfile記述し、db:migrateあたりでエラー

操作の手順としては

 

1.ローカル環境にRails5.1.4をインストール後、チュートリアル通りにアプリ立ち上げ

(ターミナルで以下を実行) $ rails _5.1.4_ new tutorial_toy_app(アプリ名) $ cd tutorial_toy_app/

 

 

2.チュートリアル通りGemfileを書き換え。そしてbundle install –without production

 

 引用元: https://railstutorial.jp/chapters/toy_app?version=5.1#cha-a_toy_app

 

3.gitでadd と commit。heroku create(=Heroku側に受け皿を作っておく作業)。

 

4.git push heroku master(ブランチ切っていたので実際はbranch:master)

 

5.bundle exec heroku run rake db:migrate でエラー発生。

 

もちろんheroku open でもApplication Error

 

エラー内容:Gemfileとdatabase.ymlでなにか問題があるのか??

今回発生していたエラーはGemfileとdatabase.yml、のところで、 pgのエラーと

Could not load ‘active_record/connection_adapters/pg_adapter’

 

sqlite3のエラー

 

Specified ‘sqlite3’ for database adapter, but the gem is not loaded. Add `gem ‘sqlite3’` to your Gemfile

この2つのエラーを行ったり来たり(笑)Gemfileでsqlite3入れてるのになぜ…

対処法1:ググってsqlite3とpgに分けてみる => 失敗

ググったところ、テスト環境と開発環境はsqlite3,productionはpg

というふうに、使うデータベースを分ければよいとの記事を見かけましたので

 Gemfileで

gem ‘rails‘, ‘5.1.4’
#ここから追加
gem ‘sqlite3’, groups: %w(test development), require: false
gem ‘pg’, groups: %w(production), require: false
#ここまでが追加した記述
gem ‘puma’, ‘3.9.1’
gem ‘sass-rails‘, ‘5.0.6’
gem ‘uglifier’, ‘3.2.0’
gem ‘coffee-rails‘, ‘4.2.2’
gem ‘jqueryrails‘, ‘4.3.1’
gem ‘turbolinks’, ‘5.0.1’
gem ‘jbuilder‘, ‘2.6.4’ group :development, :test do
#gem ‘sqlite3’, ‘1.3.13’  ←ここの記述は上で追加したとことかぶるからここの行は不要になる
gem ‘byebug’, ‘9.0.6’, platform: :mri
end
#group production の行も消す
# windows環境では~のコメントはそのまま

 

database.ymlファイルのadapterもGemfileに合わせてtest developmentはsqlite3, productionはpgに書き換え。

 

これで、bundle installからherokuにpushまでして(heroku createはもうしなくてよい) db:migrateする

→ やっぱりエラー!

→ pgのバージョン指定とか確認とか、pgをpostgresql直してみたりとか微妙に変更

→ リトライ → やっぱりエラー! → ・・・(´Д⊂ヽ

 


[2018.8.5追記] こちらで成功ましたのでご参考までに。

 

対処法2:データベースをmysql2に変更してみる => 成功^^;

うーむ…こうなったらpostgresqlでなくてMySQLに変更しちゃおうかなと。 参考にしたのはこちらの記事と、 qiita.com

 

それと以前に知人に教わってHeroku環境作ったときの資料に倣うことにしました。

Gemfileは

source ‘https://rubygems.org’

gem ‘rails‘, ‘5.1.4’
gem ‘mysql2’, ‘0.3.18’
gem ‘puma’, ‘3.9.1’
gem ‘sass-rails‘, ‘5.0.6’
gem ‘uglifier’, ‘3.2.0’
gem ‘coffee-rails‘, ‘4.2.2’
gem ‘jqueryrails‘, ‘4.3.1’ gem ‘turbolinks’, ‘5.0.1’
gem ‘jbuilder‘, ‘2.7.0’

group :development, :test do
gem ‘byebug’, ‘9.0.6’, platform: :mri
end

group :development do
gem ‘web-console’, ‘3.5.1’
gem ‘listen’, ‘3.1.5’
gem ‘spring’, ‘2.0.2’
gem ‘spring-watcher-listen’, ‘2.0.1’
end

#group :production do
# gem ‘pg’, ‘0.20.0’
#end

# Windows環境ではtzinfo-dataというgemを含める必要があります
gem ‘tzinfo-data’, platforms: [:mingw, :mswin, :x64_mingw, :jruby]

 

database.ymlは

default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: root
password:
socket: /tmp/mysql.sock

development:
<<: *default
database: tutorial_toy_app_development

#コメントは省略
test:
<<: *default
database: tutorial_toy_app_test

#コメントは省略
production:
<<: *default
database: tutorial_toy_app_production
username: tutorial_toy_app
password: <%= ENV[‘TUTORIAL_TOY_APP_DATABASE_PASSWORD’] %>

 

* tutorial_toy_appの箇所は自分のプロジェクト名になっていることを確認。

なっていなければ書きかえる。

 

にしてからbundle installを実行。

 

そしてその次、

 

★Herokuで使用しているデータベースの情報を取得する。 ターミナル以下を実行

 heroku config | grep CLEARDB_DATABASE_URL

 =>出てきた値(mysql://~~~)をコピーする

 

 

★Gemfileではmysql2と記述したので、先ほど出てきたURLもmysql2に変更する必要がある

 

 データベース情報のmysql:の部分をmysql2:に変更して heroku config:addコマンドでデータベース情報を再設定する

 
ターミナルで以下を実行

  例:heroku config:add DATABASE_URL=’ mysql2 :〜’ 

         (〜は上のURLの://以下の部分そのままを使う)

 

★エディタ側でGemfileも変更を加えたらgit addと commitを再度行い、続けてgit push heroku branch(master)を実行

 

そのあと bundle exec heroku run rake db:migrate 実行

 

 → ようやく成功。

 課題点

回避はできたけど解決はしてない。

 

Herokuに入れてるaddonのせいかな?

 

うーん…SQL基礎を身につけて、このへんもうちょっと自分で理解しながら進められるようになりたい。。

 

[2018.8.5追記] 今回のpgエラー解決できたので投稿!

 

 

その他参考にした記事:

tex2e.github.io qiita.com

 

ここまで読んでくださり、ありがとうございました^^