はじめに
この記事ではデプロイエラーの対応をまとめています!最後の山場だ!
デプロイエラー対応の大原則は
エラーログを読み込んで、原因を特定する
です!
常に上記の意識を持っておきましょう!
大きく分けると以下の3つに分類できるかと思います!
- git push heroku masterが上手くできない
- heroku run rails db:migrateが上手くできない
- デプロイはできたけど、ページが開かない
herokuを操作するコマンドは以下の記事にまとまっているので、参考にしてみてください!
herokuコマンドまとめ
また、Control(command) + Fで文字検索することができます。
コマンドプロンプト(ターミナル)中でerror
の文字を検索すると場所が特定しやすくなるので利用しましょう!
1. git push heroku masterが上手くできない
Precompiling assets failed.
エラーログの下の方にPrecompiling assets failed.が表示されているときは、何らかの理由で必要なモノが送られなかったことを表します。必ずエラーログを読み込んで、エラーの場所を特定しましょう!
また、このエラーは様々な因果関係の文脈が存在します。Precompiling assets failed.をググって出てきた記事をそのまま適用すると新たなエラーの原因になる可能性があるので、注意してください!
###Case1
#####you may have defined two routes with the same name
rootのルーティングを2個定義してしまっているパターンです。routes.rbファイルにて、rootを一つのみに修正した後、以下を実行しましょう!
$ git add -A
$ git commit -m "routes.rb変更done"
$ git push heroku master
###Case2
#####SyntaxError
どこかのファイル中(特にcssファイル)に文法ミスがあります。修正後、以下を実行しましょう!
$ git add -A
$ git commit -m "Syntaxerror修正done"
$ git push heroku master
###Case3
#####Gem::LoadError: pg is not part of the bundle. Add it to your Gemfile.
主にwindows PCにて.bundleフォルダーが残っているために起きます。解決策は以下です。
STEP1 :
ターミナル
$ bundle install --without production
STEP2 :
appディレクトリと同じ階層にある.bundleフォルダを消す
STEP3 :
ターミナル
$ git add -A
$ git commit -m'gem pg問題直ってくれ!'
$ git push heroku master
###Case4
##### error Command "webpack" not found.
このエラーは、webpack系のファイルがアプリケーションに入ってないことから起きています。
そしたら、アプリケーション内にインストールしてあげましょう!
解決策は以下になります!
####解決策①
STEP1:
$ rails webpacker:install
ターミナルで上記のコマンド打った後、再度pushしてみてください!
$ git add -A
$ git commit -m'webpacker問題治ってくれ!'
$ git push heroku master
####解決策② (解決策①でもエラー出た人向け)
それでも同じエラーが出た人は以下参照お願いします!
上記のコマンドを打っても同じエラーが出た人は、おそらくnode.jsのバージョンが低いことが原因としてあげられると思います!
そしたら,webpackを直接ファイルごとアプリケーションに入れちゃいましょう!
###STEP1:
まず,webpack系のファイルをダウンロードするために以下のリンクにアクセスします!!
https://github.com/webpack
上の画面が出てきたと思います!
今回は,webpack系のファイル(webpcak,webpack-dev-server,webpack-cli)をダウンロードします!
最初は、webpackから行きましょう!
webpackの文字をクリックすると以下の画像になると思います!!
そしたら、右上のcodeというボタンがあると思うので,そこの矢印ボタンをクリックした後、Download ZIPをクリック!!
クリックすると、ファイルがダウンロードされます!
おそらくZIPファイルなので、展開してあげてください!!
展開の仕方がわからない人は以下のリンクからアクセス!!
windowsの展開方法 https://dekiru.net/article/19553/
macの展開方法 https://pc-karuma.net/mac-compress-file-zip/
残りのファイルwebpack-dev-server,webpack-cliもSTEP1と同様の手順でダウンロード・展開していきましょう!
###STEP2:
今回STEP1でダウンロードをしたのち展開を行った結果、以下のファイルができたと思います!!
今回ダウンロードしたファイル名に-masterがついてるので、-masterの部分を消してあげてください!
上のファイル名になってればOKです。
###STEP3:
このファイルを直接アプリケーションに入れてあげましょう!!
ターミナル上に、これからデプロイするアプリケーションの階層で、以下のコマンドを入力してください!
(WindowsのPC)
$ start .
(MacのPC)
$ open .
上記のコマンドを打つと以下のようなファイルが開かれると思います!
今回展開されたものは、これからデプロイしようとしているアプリケーションをファイル形式で表示しているだけです!
そしたら、上の画面からnode_modules
というファイルを探してみてください!! 上から8~9つめにあると思います!
これから先ほどダウンロードした、webpackファイルをnode_modules
にぶち込みます!
手順は簡単です!ドラック&ドロップで入れるだけです!!
webpcak,webpack-dev-server,webpack-cliが、node_modulesに入ってればオッケーです!!
###STEP4:
これで最後になります!!
次にVSCODEを開いてください!!
package.jsonというファイルにプログラムを記入していきます!
package.jsonの位置は以下の画像になります!
このファイルを開くと上の画像のようになるので、さっそく下記のプログラムを記入していきましょう!
"@rails/webpacker": "4.2.2"
#####注意点 :インデントは、他の行のプログラムと同じように記入してください! (下の画像参照)
プログラムの頭は、先頭から4つ空白をあけるようお願いします!
位置も下の画像と同じ位置(大体7,8行目あたり)に記入!
JSONファイルは書き方が特殊なので注意してください!
JSONファイルの構造に興味がある方はこちら
以上で、webpackのインストールは完了です!
以下のように再pushしてみてください!
お疲れ様でした!
$ git add -A
$ git commit -m'webpacker問題治ってくれ!'
$ git push heroku master
Failed to install gems via Bundler.
Failed to install gems via Bundler.は、gemがherokuに送られなかったエラーですが、様々な原因があります。
###Case1
#####/usr/bin/env: ‘ruby\r’: No such file or directory
ruby¥rは改行コードを表していて、この種類が異なるとファイルが探し出せなくなります。herokuはLFという改行コードを用いるので、これに合わせる必要があります。
これは、以下のように解決できます。
自分のプロダクトのvscode上で、binというフォルダー以下に存在する全てのファイルに対して、vscodeの改行コードをCRLF→LFに変更します(右下の青い場所から変更できます)

これをした後に、自分のプロダクトディレクトリーから、
$ git add -A
$ git commit -m'改行コード問題解消done'
$ git push heroku master
###Case2:以下のような文章が出ている場合
gem environment
と入力しましょう。そしたら以下のような文章が出てくるはずです。
上記の中の、INSTALLATION DIRECTORYをコピーします。上記で言えば、/Users/jiroumaru/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0
の部分です。
そしたら一度ターミナルを開き直して、cdのあとにスペースを開けて、ペーストします。
cd /Users/jiroumaru/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0
のような形です。cdの後は人によって異なります。その後、それに続けて、
cd specifications
rm -rf default
を1行ずつ実行して、ターミナルを閉じましょう。上記が終了したら、いつものように
cd Desktop
cd アプリケーションのフォルダ名
を実行して、この後は以下のコマンドを立て続けに入力してください
gem install bundler -v 2.2.16
bundle _2.2.16_ install
bundle update
bundle install --without production
git add -A
git commit -m "Release to heroku"
git push heroku master
以上です。
###Case3:以下のような文章が出てきている場合
remote: -----> Installing dependencies using bundler 2.2.16
remote: Running: BUNDLE_WITHOUT='development:test' BUNDLE_PATH=vendor/bundle BUNDLE_BIN=vendor/bundle/bin BUNDLE_DEPLOYMENT=1 bundle install -j4
remote: Your bundle only supports platforms ["x86_64-darwin-20"] but your local platform
remote: is x86_64-linux. Add the current platform to the lockfile with `bundle lock
remote: --add-platform x86_64-linux` and try again.
remote: Bundler Output: Your bundle only supports platforms ["x86_64-darwin-20"] but your local platform
remote: is x86_64-linux. Add the current platform to the lockfile with `bundle lock
remote: --add-platform x86_64-linux` and try again.
以下のコマンドを順に実行してみましょう
bundle lock --add-platform x86_64-linux
git add -A
git commit -m "Release to heroku"
git push heroku master
以上です。
error: failed to push some refs to ~
こちらも、何らかの理由で必要なモノがGitに送られなかった(ましてやheroku)ことを表します。
###Case1
#####ActiveRecord::DatabaseConfigurations::InvalidConfigurationError
上記の場合、config/database.yml中に記述ミスがあるエラーです。インデントが文法の意味を持つため、半角スペース2つを必ず守りましょう!
production:
<<: *default
adapter: postgresql
encoding: unicode
pool: 5
# インデントは必ず半角スペース2つ
修正後、
$ git add -A
$ git commit -m "Syntaxerror修正done"
$ git push heroku master
2. heroku run rails db:migrateが上手くできない
heroku上のデータベースはmigrationファイルを基にして順番に作成されます。
migrationファイルの中に不都合を起こすものがあると、データベースを構築できずに、Rollbackエラーが起こります。
###Case1
#####UndefinedTable: ERROR: relation "users" does not exist
外部キーであるuser_idはusersテーブルが存在していることが前提です。そのため、usersテーブルを先に作成する必要があります。解決策は以下です。
step1 :
devise_create_usersのmigrationファイル名の**日時のみ(後半の英文部分は変えないように!)**をrenameし、一番上に持ってきます。(rails db:rollback
はしなくてもOK!)
step2 :
ローカル環境でデータベースが構築できるかを試すために以下を実行します。
$ rails db:migrate:reset
今あるデータベースを一度破棄し、migrationファイルを基にもう一度データベースを作成し直します。これが通れば、herokuでも成功するはずです!
※windowsの場合上記コマンドが利用できません。その時は
step1
db/development.sqlite3
ファイルを消す
step2
$ rails db:create
$ rails db:migrate
でresetコマンドと同じ操作ができます!
※上記コマンドを打つと、以下を実行して!と出る場合があります。その際は指示通り以下を実行しましょう。
$ rails db:environment:set RAILS_ENV=development
これの実行後もう一度$ rails db:migrate:reset
を実行してください。
step3 :
以下コマンドにより、heroku上で途中まで作ってあるDBを一旦リセットします。「アプリ名」はheroku createで作成したものを入力します。
$ heroku pg:reset -a アプリ名
step4 :
$ git add -A
$ git commit -m'db:migrateできますように'
$ git push heroku master
$ heroku run rails db:migrate
###Case2
#####PG::DuplicateColumn: ERROR: column "user_id" of relation "tweets" already exists
「カラムが重複しているよ!」というエラーです。同じカラム名のものを作成する記述がmigrationファイル中に2つ以上あることが原因です。
step1 :
migrationファイルから、被っているカラムの箇所を取り除きます。
(rails db:rollback
はしなくてもOK!)
step2 :
ローカル環境でデータベースが構築できるかを試すために以下を実行します。
$ rails db:migrate:reset
今あるデータベースを一度破棄し、migrationファイルを基にもう一度データベースを作成し直します。これが通れば、herokuでも成功するはずです!
※windowsの場合上記コマンドが利用できません。その時は
step1
db/development.sqlite3
ファイルを消す
step2
$ rails db:create
$ rails db:migrate
でresetコマンドと同じ操作ができます!
※上記コマンドを打つと、以下を実行して!と出る場合があります。その際は指示通り以下を実行しましょう。
$ rails db:environment:set RAILS_ENV=development
これの実行後もう一度$ rails db:migrate:reset
を実行してください。
step3 :
以下コマンドにより、heroku上で途中まで作ってあるDBを一旦リセットします。「アプリ名」はheroku createで作成したものを入力します。
$ heroku pg:reset -a アプリ名
step4 :
$ git add -A
$ git commit -m'db:migrateできますように'
$ git push heroku master
$ heroku run rails db:migrate
3. デプロイはできたけど、ページが開かない
上記のような画面が出てくるパターンです。
まず、
$ heroku logs --tail
を実行し、エラーログを出力します!その後、エラーを特定して、修正を加えましょう!
その際、Ctrl+Fで「error」の文字を検索すると見つかる可能性が高くなります!
###Case1
#####Must supply cloud_name in tag or in configuration
Cloudinaryとの紐付けが上手くいっていないことを表します。
まず、
画像投稿の記事を確認し、ファイルの場所、名前、コードがあっているか確認してください。
よくある原因は以下です。
① cloudinaryのapi_key等が異なる(.envファイル中や以下のコマンドの結果を確認しましょう)
$ heroku config:set CLOUD_NAME=
$ heroku config:set CLOUDINARY_API_KEY=
$ heroku config:set CLOUDINARY_API_SECRET=
②.envの位置がルートディレクトリ直下じゃない(Gemfileとかと同レベルです)
③ cloudinaryのメールで本登録してない
④ cloudinary.ymlの位置がconfig以外にある(config以下に置く必要があります)