Railsチュートリアル Herokuへデプロイ時 sqlite3とpgのエラーの記録
移転しました。3秒後に移転先へ移動します。
Railsチュートリアル2章の初っ端、Herokuにデプロイしようとしたらsqlite3とPostgresql関連でエラー文が…
自分の出したエラーと対処(というか回避)の記録。
- 手順:チュートリアル通りGemfile記述し、db:migrateあたりでエラー
- エラー内容:Gemfileとdatabase.ymlでなにか問題があるのか??
- 対処法1:ググってsqlite3とpgに分けてみる => 失敗
- 対処法2:データベースをmysql2に変更してみる => 成功^^;
- 課題点
手順:チュートリアル通りGemfile記述し、db:migrateあたりでエラー
操作の手順としては
1.ローカル環境にRails5.1.4をインストール後、チュートリアル通りにアプリ立ち上げ
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 'jquery-rails', '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に変更しちゃおうかなと。
参考にしたのはこちらの記事と、
それと以前に知人に教わって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 'jquery-rails', '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エラー解決できたので投稿!
その他参考にした記事:
ここまで読んでくださり、ありがとうございました^^