Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 3 years have passed since last update.

デプロイエラー対応まとめ

Last updated at Posted at 2020-10-24

はじめに

この記事ではデプロイエラーの対応をまとめています!最後の山場だ!

デプロイエラー対応の大原則は
エラーログを読み込んで、原因を特定する
です!
常に上記の意識を持っておきましょう!

大きく分けると以下の3つに分類できるかと思います!

  1. git push heroku masterが上手くできない
  2. heroku run rails db:migrateが上手くできない
  3. デプロイはできたけど、ページが開かない

herokuを操作するコマンドは以下の記事にまとまっているので、参考にしてみてください!

herokuコマンドまとめ

また、Control(command) + Fで文字検索することができます。
コマンドプロンプト(ターミナル)中でerrorの文字を検索すると場所が特定しやすくなるので利用しましょう!

1. git push heroku masterが上手くできない

Precompiling assets failed.

image.png

エラーログの下の方にPrecompiling assets failed.が表示されているときは、何らかの理由で必要なモノが送られなかったことを表します。必ずエラーログを読み込んで、エラーの場所を特定しましょう!

また、このエラーは様々な因果関係の文脈が存在します。Precompiling assets failed.をググって出てきた記事をそのまま適用すると新たなエラーの原因になる可能性があるので、注意してください!

###Case1

#####you may have defined two routes with the same name

image.png

rootのルーティングを2個定義してしまっているパターンです。routes.rbファイルにて、rootを一つのみに修正した後、以下を実行しましょう!

$ git add -A
$ git commit -m "routes.rb変更done"
$ git push heroku master

###Case2

#####SyntaxError

image.png

どこかのファイル中(特に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.

image.png

主に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.
errorwebpack.jpg

このエラーは、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パッケージ.jpg

上の画面が出てきたと思います! 
今回は,webpack系のファイル(webpcak,webpack-dev-server,webpack-cli)をダウンロードします!
最初は、webpackから行きましょう!

webpackの文字をクリックすると以下の画像になると思います!!
webpackgithubjson.jpg

そしたら、右上のcodeというボタンがあると思うので,そこの矢印ボタンをクリックした後、Download ZIPをクリック!!
回答.jpg

クリックすると、ファイルがダウンロードされます!
おそらくZIPファイルなので、展開してあげてください!!
展開の仕方がわからない人は以下のリンクからアクセス!!

windowsの展開方法 https://dekiru.net/article/19553/
macの展開方法 https://pc-karuma.net/mac-compress-file-zip/

残りのファイルwebpack-dev-server,webpack-cliもSTEP1と同様の手順でダウンロード・展開していきましょう!

###STEP2:

今回STEP1でダウンロードをしたのち展開を行った結果、以下のファイルができたと思います!!
webpack123.jpg

今回ダウンロードしたファイル名に-masterがついてるので、-masterの部分を消してあげてください!

[変更後]
名称変更後.jpg

上のファイル名になってればOKです。

###STEP3:
このファイルを直接アプリケーションに入れてあげましょう!!
ターミナル上に、これからデプロイするアプリケーションの階層で、以下のコマンドを入力してください!

(WindowsのPC)

$ start .

(MacのPC)

$ open .

上記のコマンドを打つと以下のようなファイルが開かれると思います!
abcd.jpg

今回展開されたものは、これからデプロイしようとしているアプリケーションをファイル形式で表示しているだけです!
そしたら、上の画面からnode_modulesというファイルを探してみてください!! 上から8~9つめにあると思います!

nodemodule.jpg

これから先ほどダウンロードした、webpackファイルをnode_modulesにぶち込みます!
手順は簡単です!ドラック&ドロップで入れるだけです!!
入れる.jpg

webpcak,webpack-dev-server,webpack-cliが、node_modulesに入ってればオッケーです!!
webpack.jpg

###STEP4:
これで最後になります!!

次にVSCODEを開いてください!!
package.jsonというファイルにプログラムを記入していきます!

package.jsonの位置は以下の画像になります!
package.jpg
このファイルを開くと上の画像のようになるので、さっそく下記のプログラムを記入していきましょう!

package.json
"@rails/webpacker": "4.2.2"

#####注意点 :インデントは、他の行のプログラムと同じように記入してください! (下の画像参照)
プログラムの頭は、先頭から4つ空白をあけるようお願いします!
位置も下の画像と同じ位置(大体7,8行目あたり)に記入!
JSONファイルは書き方が特殊なので注意してください!
JSONファイルの構造に興味がある方はこちら

package1.jpg
上の画像と同じように記入されてれば、オッケーです!

以上で、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

image.png

ruby¥rは改行コードを表していて、この種類が異なるとファイルが探し出せなくなります。herokuはLFという改行コードを用いるので、これに合わせる必要があります。

これは、以下のように解決できます。

自分のプロダクトのvscode上で、binというフォルダー以下に存在する全てのファイルに対して、vscodeの改行コードをCRLF→LFに変更します(右下の青い場所から変更できます)

これをした後に、自分のプロダクトディレクトリーから、

$ git add -A
$ git commit -m'改行コード問題解消done'
$ git push heroku master

###Case2:以下のような文章が出ている場合

スクリーンショット 2021-05-16 23.49.20.png

gem environment

と入力しましょう。そしたら以下のような文章が出てくるはずです。
スクリーンショット 2021-05-16 23.52.51.png
上記の中の、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 ~

image.png

こちらも、何らかの理由で必要なモノがGitに送られなかった(ましてやheroku)ことを表します。

###Case1

#####ActiveRecord::DatabaseConfigurations::InvalidConfigurationError

image.png

上記の場合、config/database.yml中に記述ミスがあるエラーです。インデントが文法の意味を持つため、半角スペース2つを必ず守りましょう!

config/database.yml
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

image.png

外部キーである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

image.png

「カラムが重複しているよ!」というエラーです。同じカラム名のものを作成する記述が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. デプロイはできたけど、ページが開かない

image.png

image.png

上記のような画面が出てくるパターンです。
まず、

$ heroku logs --tail

を実行し、エラーログを出力します!その後、エラーを特定して、修正を加えましょう!
その際、Ctrl+Fで「error」の文字を検索すると見つかる可能性が高くなります!

###Case1
#####Must supply cloud_name in tag or in configuration

image.png

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以下に置く必要があります)

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?