こんにちは、つかりーんです。
作成したRailsアプリをデプロイするという最後の最後になってエラーにはまりました。
あとはこのコードを打ち込んだらデプロイできる!
よっしゃぁぁああ!
と思ってHerokuに入れる時のコードを打ち込むと
1 |
git push heroku master |
↓
1 2 3 4 5 6 7 8 9 |
remote: ! remote: ! Precompiling assets failed. remote: ! remote: ! Push rejected, failed to compile Ruby app. remote: ! Push failed remote: Verifying deploy... remote: remote: ! Push rejected to mygiji. remote: |
なんかrejectって書いてる!?ちゃんとできてない気がする!?
はい、出来ていませんでした。
この文章をググってたくさん記事を読んだけれど解決できず・・・
ここ以外に解決の糸口があったので備忘録として残します。
原因はデータベースの設定だった
上のエラー文はエラーが出てるよ!ということを教えてくれてるだけで、原因を読み解くことができません。
全体はながーい文章になりますが、ちゃんと読んでエラー個所を探しましょう。
私は2箇所エラーが表示されていました。
1 2 3 |
Gem::LoadError: pg is not part of the bundle. Add it to your Gemfile. LoadError: Error loading the 'postgresql' Active Record adapter. Missing a gem it depends on? pg is not part of the bundle. Add it to your Gemfile. |
意味は両方とも「pgが入ってないからGemfileに入れてね!」ということだと思いますが・・・
pg=PostgreSQLを入れる?!
私はアプリ作成時のデータベースはMySQLを使っていたので、これは信じたくない解釈でした。
ですが、結局はpgのインストールが解決方法ではなくてデータベースの設定の問題であることがわかりました!
解決法
1. heroku configでデータベースが何になっているか確認
$ heroku configで一度データベースの設定を確認してみてください!ClearDBアドオンでMySQLに変えてるはずだと思い込んだことが、私の今回の敗因でしたので・・・
1 2 3 4 5 6 |
$ heroku config === mygiji Config Vars CLEARDB_DATABASE_URL: mysql2://~~~~ CLEARDB_GOLD_URL: mysql://~~~~ CLEARDB_RED_URL: mysql://~~~~ DATABASE_URL: postgres://~~~~ |
ここのDATABASE_URLがpostgreになってるので、先ほどのようなエラーが出ていることがわかりました。
2. DATABASE_URLがpostgresとなっているのをmysql2に変更する
DATABASE_URLを1行目のCLEARDB_DATABASE_URLと同じアドレスに変更します。
1 |
$ heroku addons:destroy heroku-postgresql -a アプリ名 |
このコマンドを実行した後に
1 |
$ heroku config:set DATABASE_URL='mysql2://~~~~~' |
これで変更完了です!
3. heroku configで確認
もう一度$ heroku configで確認してみましょう!
1 2 3 4 5 |
=== mygiji Config Vars CLEARDB_DATABASE_URL: mysql2://~~~~ CLEARDB_GOLD_URL: mysql://~~~~ CLEARDB_RED_URL: mysql://~~~~ DATABASE_URL: mysql2://~~~~ |
できた!!
Herokuの初期設定はPostgreSQLになっている
Herokuでは初期設定でデータベースがPostgreSQLになっています。
なので、ClearDB(MySQLに相当するもの)に変更する必要があります。
★変更の仕方★
1 2 3 4 |
#このコマンドでMySQLへ変更する $ heroku addons:add cleardb => Adding cleardb on fathomless-fortress-5255... done, v3 (free) => Use `heroku addons:docs cleardb` to view documentation. |
1 2 3 |
#自分のデータベース情報を表示する $ heroku config | grep CLEARDB_DATABASE_URL => CLEARDB_DATABASE_URL: mysql://~~~~ |
ここで表示された~~~部分が自分のデータベース情報になります。
これをmysql2://~~~~に変更すればOKです。
1 2 3 |
$ heroku config:set DATABASE_URL=mysql2://~~~~ => Setting config vars and restarting fathomless-fortress-5255... done, v4 => DATABASE_URL: mysql2://~~~~ |
DATABASE_URLが変更されていれば無事完了です。
ただ、私はこれをやったにも関わらずDATABASE_URLがpostgreになってました。
その場合は先程のように addons:destroy で変更してみてください!
どしてもわからないときは
この方法を試してみたけどやっぱりできない・・・と行き詰ってしまったときは、誰かに聞くというのも手です。
「エンジニアの知り合いなんていないんだけど」という方にお勧めのがMENTA。
MENTAの使い方はこの記事にまとめています。
プロの手を借りて、今のもやもやを一刻も早く晴らしてしまいましょう!
終わりに
今回のエラーを通して、エラー文をちゃんと読むことと、データベースがMySQLになっているかを確認することを学びました。
アプリ制作はたくさんの知識が必要なので難しいです^^;
ではまた!
コメント