Ruby on Rails プログラミング 日記投稿サービスを1から作る

Railsアプリをherokuにデプロイ 数多のエラーと出会う

 

みやちゃ

 

皆さんこんにちは、みやちゃです!

物理とプログラミングについて解説しています!

ポートフォリオとしてRailsでアプリを開発したけど、公開の仕方がわからない。

herokuとやらにデプロイ?するらしいけど、エラーだらけでわからない。

このような方のために、今回はherokuに開発したアプリをデプロイする方法を解説します!

今回は
  • Herokuへアカウント登録
  • Heroku CLIインストール
  • Herokuへのデプロイ
  • デプロイの際に出た3つのエラーの紹介と解決方法
この記事を読むと

Herokuへのデプロイができます。また、その際に出てくるかもしれないエラーも3つ紹介しています。

以下のような流れで進めていきます!

流れ
  • Herokuへの登録
  • Herokuへのデプロイ
  • エラーの紹介

Herokuの登録

まずはこちらからHerokuにユーザー登録をし、アカウントを作成します。

「Role」のところは「Hobbyist」を選択します。

全ての必須項目を埋めたら、「CREATE FREE ACCOUNT」ボタンを押します。

すると、登録したメールアドレスにパスワード設定のメールが届くので、パスワード設定をすれば、アカウントの作成は完了です。

Heroku CLIをインストール

Heroku CLIをこちらからインストールします。

Heroku CLIは、Herokuアプリケーションの作成及び管理をするためのツールとして必要になります。

無事インストールできたらコマンドラインでログインしてみましょう!

ターミナルを開き、「heroku login」と入力します。

miyacha$ heroku login
heroku: Press any key to open up the browser to login or q to exit: 

すると、「heroku: Press any key to open up the browser to login or q to exit: 」と言われるので、Enterキーを押します。

すると、herokuのログインページが開かれます。

「Log in」ボタンを押して、ログインを完了させます。

上のように、「Logged In」とブラウザに表示されれば、ログイン完了です。

Gemfileの書き換え

gem 'sqlite3', '~> 1.4'

Gemfileのこの1行を以下のように変更してください。

group :development do
  gem 'sqlite3', '~> 1.4'
end
group :production do
  gem 'pg'
end

次に、ターミナル上で、以下のコマンドを実行します。

miyacha$ bundle install --without production
miyacha$ git add .
miyacha$ git commit -m "Added pg gem and updated Gemfile.lock"

ここまで来れば、準備が整いました。

アプリをデプロイ

ここで、Herokuに公開するアプリの名前を考えます。

ここでの名前はあなたのだけのアプリとなります。

もう決まりましたか?

それでは、コマンドを実行します。

ここでは例としてアプリの名前を「miyacha-app」とします。

miyacha$ heroku create miyacha-app
Creating ⬢ miyacha_app... !
 ▸    Name must start with a letter, end with a letter or digit and can only
 ▸    contain lowercase letters, digits, and dashes.

上のようなエラーが出た時は、名前に問題があります。

「miyacha_app」に関しては、 アンダーバー「_」を使うことができません。

別の名前にして、もう一度「heroku create」してください。

Creating ⬢ hoge-app... !
 ▸    Name hoge-app is already taken

上のようなエラーが出た時は、すでに名前が使われています。

もう一度アプリの名前を考え直してください。

Herokuにコードを送信(push)

heroku createがうまくできたら、Herokuにコードを送信しましょう。

ターミナルで以下のコマンドを実行してください。

miyacha$ git push heroku master

次のような結果が出ていれば成功です。

remote: -----> Compressing...
remote:        Done: 91.1M
remote: -----> Launching...
remote:        Released v7
remote:        https://talk-ibs.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/talk-ibs.git
 * [new branch]      master -> master

この結果が出てこなかった人は、何かしらの問題により、コードがpushできていません。

私もいくつかのエラーが出たので、下で紹介しています。

まずは、できた前提で次に進みます。

データベースのマイグレート

次にデータベースのマイグレートをします。

ターミナルで次のコマンドを実行してください。

miyacha$ heroku run rails db:migrate

このコマンドが実行できたら、インターネットブラウザから自分のサイトを見ることができます。

次のコマンドで確認してみましょう。

miyacha$ heroku open

ブラウザであなたのアプリの画面が開かれたでしょうか?

これでherokuへのデプロイができました。

git push heroku masterで起こった数多のエラー

ここからは、「git push heroku master」を実行した際に出てきたエラーを紹介していきます。

エラー1:Rubyのバージョンの不一致

以下のようなエラーが出てきました。

remote:  !
remote:  !     The Ruby version you are trying to install does not exist on this stack.
remote:  !     
remote:  !     You are trying to install ruby-2.6.3 on heroku-20.
remote:  !     
remote:  !     Ruby ruby-2.6.3 is present on the following stacks:
remote:  !     
remote:  !     - cedar-14
remote:  !     - heroku-16
remote:  !     - heroku-18
remote:  !     
remote:  !     Heroku recommends you use the latest supported Ruby version listed here:
remote:  !     https://devcenter.heroku.com/articles/ruby-support#supported-runtimes
remote:  !     
remote:  !     For more information on syntax for declaring a Ruby version see:
remote:  !     https://devcenter.heroku.com/articles/ruby-versions

...


error: failed to push some refs to 'https://git.heroku.com/talk-ibs.git'

要は「heroku-20ではruby-2.6.3は扱えないよ」っ的なことみたいです。

heroku-18なら大丈夫とあるので、heroku-20からheroku-18に変更してあげます。

miyacha$ heroku stack:set heroku-18

rubyのバージョンの問題がなくなったので、再び、「git push heroku master」を実行してあげます。

miyacha$ git push heroku master

エラー2:Failed to install gems via Bundler.

また新たなエラーが出ました。

remote:  !
remote:  !     Failed to install gems via Bundler.
remote:  !
...


...

error: failed to push some refs to 'https://git.heroku.com/talk-ibs.git'

gem関連で何か問題が生じているようです。

でもこれだけでは何が問題なのかわからないので、ログを確認します。

miyacha$ heroku logs

上記のコマンドを実行すると、ログが表示されます。

Build failed -- check your build output: https://dashboard.heroku.com/〜〜〜

その中に「Build failed」とあるので、これが先ほどの失敗した実行のことですね。

URLが添付されています。herokuのダッシュボードに行けるので、そこで詳しいエラー文を確認しましょう。

よく見ると

Running: BUNDLE_WITHOUT='development:test' BUNDLE_PATH=vendor/bundle BUNDLE_BIN=vendor/bundle/bin BUNDLE_DEPLOYMENT=1 bundle install -j4
Fetching gem metadata from https://rubygems.org/..........
Your bundle is locked to mimemagic (0.3.5), but that version could not be found
in any of the sources listed in your Gemfile. If you haven't changed sources,
that means the author of mimemagic (0.3.5) has removed it. You'll need to update
your bundle to a version other than mimemagic (0.3.5) that hasn't been removed
in order to install.
Bundler Output: Fetching gem metadata from https://rubygems.org/..........
Your bundle is locked to mimemagic (0.3.5), but that version could not be found
in any of the sources listed in your Gemfile. If you haven't changed sources,
that means the author of mimemagic (0.3.5) has removed it. You'll need to update
your bundle to a version other than mimemagic (0.3.5) that hasn't been removed
in order to install.

エラー文を読むと、どうやらRailsが依存しているmimemagic(0.3.5)が「that version could not be found」となっているみたいです。

bundle updateでmimemagicをアップデートしてあげます。

以下によると、nokogiriとmarcelもアップデートしてあげたほうがいいかもしれません。

https://github.com/rails/rails/issues/41757#issuecomment-806938727

参考資料

以下のコマンドを実行します。

miyacha$ bundle update nokogiri marcel mimemagic

これで解決するはずです。

エラー3:それでも出続ける同じエラー

rubyのバージョンは整えたし、よくわからないgemもアップグレードして皆はここで解決しているのに、なぜか自分だけ治らない。。

私の場合はこのエラーが何度も出続けました。

原因は、ブランチを切って作業していたことです。

マスターにマージしてあげれば、うまくいきます。

miyacha$ git add .
miyacha$ git commit -m "update nokogiri marcel mimemagic"
miyacha$ git checkout master
miyacha$ git merge [ブランチ名]


miyacha$ git push heroku master

今回の「git push heroku master」でやっと成功すると思います。

変更を反映する時

先ほどでHerokuへのデプロイが完了しましたが、変更を加えて、それを再デプロイしたいときは、以下のコマンドを実行しましょう。

miyacha$ git add .
miyacha$ git commit -m "message"
miyacha$ git push heroku master

うまく変更が反映したかどうかを以下のコマンドで確認しましょう。

miyacha$ heroku open

まとめ

いかがでしたでしょうか?

今回は、Railsで開発したポートフォリオをHerokuへのデプロイについて解説しました。

個人的にはかなりエラーが出たので難しく感じたのですが、皆様はいかがでしたでしょうか?

 

みやちゃ

 

ここまでご覧いただきありがとうございます!

こちら のUdemyの動画教材は、8時間で、

  • Dockerで仮想環境構築
  • Railsの基礎を解説しながら、アプリケーション開発
  • RSpecでテストを記述

まで解説しています。

Udemyの教材へ

Railsエンジニアとして働くために必要な、DockerとRSpecを同時に解説してくれています。

DockerとRSpecを使って作ったポートフォリオはかなり評価が高くなります。

ぜひ動画を見てみてはいかがでしょうか?

Udemyの教材へ

受講生は、5000人以上!です。

さらに、Udemyは、30日間の返金保証付きなので、いつでも返金できます。

たったの8時間でDocker、Rails、Rspecを学ぶ即戦力Railsエンジニア養成講座

© 2021 みやちゃのブログ Powered by AFFINGER5