お久しぶりです。Jyu2です。
最近はブログの更新もままなっていませんが、以前挫折したRailsチュートリアルを再度1からチャレンジしています。
以前は「挫折しないRailsチュートリアル」って感じでブログ記事にしてましたが、完全に挫折してしまいました。
目標は今年中に何かWebアプリ、Webサービスを作ること。
理想はそれを元にマネタイズしたいところです。
そうでなくても転職活動のポートフォリオとなればと思っています。(本当に転職するかは分からない)
それで意気揚々と第1章を始めたわけですが、1章の最後であるHerokuへのデプロイに失敗して四苦八苦したので、今回はその対処方法をご紹介します。
Railsチュートリアルってなんぞやって方は以前記事にしてるので、そちら参照してみてください。
ちなみに僕は今回Web版の第6版で学習を初めています。(980円+税)
過去版だと無料で学習できますが、Railsなどのバージョンが古いので最新版でやるをオススメします。
目次
Herokuとは
Web系プログラミングの初学者の方は、そもそもHerokuって何?というところから始まると思います。
僕もそうでした。
しかもRailsチュートリアルの1章を終えた今でもHerokuって何だよって思ってますw
Herokuとはアプリの構築、提供、監視、スケールに役立つクラウドプラットフォームで、アイデアをだしてから運用を開始するまでのプロセスを迅速に進めることが可能です。また、インフラストラクチャの管理も問題からも開放されます。
引用元:Herokuホームページ
これだけ見ても良く分かりませんね…。
IT業界によくある、分からないからググっても、その結果が難しすぎて良く分からないの典型だと思います。
Herokuとはアプリケーションを実行するための環境
Herokuとはアプリケーションを実行するための環境のことになります。
アプリケーションを実行するためには、データを登録するデータベースや、画面操作した処理を動かすためのサーバー環境が必要になりますが、それを簡単に利用することができます。
自分で1からアプリケーションサーバーを開発作成しようとすると、サーバー用のパソコンを用意して、そこにデータベースをインストールして・・・などと手間や時間がかかってしまいます。
また、アプリの利用者が増えて「サーバー用のパソコンを増強したい」と思った時も、自作の環境だとサーバーのスペックを増強するのは簡単ではないです。
それを解決してくれるのが、HerokuのようなPaaS(Platform as a Service)になります。
Paasとは
Herokuのことを調べてたら、PasSという新たな言葉が出てきましたね…。
PasSとは前述した通りPlatform as aServiceの略になります。
インターネット上でアプリケーションを公開しようとおもった場合、次のような手順を踏まないとアプリケーションを作り始めることするできませんでした。
- サーバーPCやルータなどのハードウェア購入
- インターネットに接続し、ネットワークを構築
- サーバーの仮想化環境を整備
- LinuxやWindowsサーバーなどのOSをインストール
- Oracle、MySQL、PostreSQLなどのデータベースをセットアップ
- Java、Ruby、PHPなどのアプリケーションをセットアップ
いや〜多いです_。
PaaSは上に挙げた作業を代行してくれるサービスになります。
う〜ん。便利ですねぇ。
Herokuの3つのメリット
今回はHerokuの回ではないので、サラッと。
拡張機能が豊富
拡張機能を使うだけでメール配信用の環境が利用できるようになるなど、さまざまな拡張機能が用意されています。
スケールアウトが簡単
スケールアウトとは、システムを構成するサーバーの台数を増やし、システムの処理能力を高めることです。
Herokuではこれを設定画面からの操作や簡単なコマンドで実行できます。
運用をサポートする標準機能が揃っている
アプリ開発が終わったら、それで作業が終わるわけではありません。
アプリをリリースした後、それが正しく迅速に動作するように運用していく必要があります。
それをサポートするための「ログ」や「パフォーマンス」をチェックして、状況を早くする技術が必要になりますが、Herokuでは、「ログ」や「パフォーマンス」を確認する機能も備わっており、それらを利用するために別途費用がかかるということもありません。
Railsチュートリアル第6版 1章で発生した問題点
長々とHerokuの説明をしてしまいましたが、本題は2021年2月の段階でRailsチュートリアル第6版の1章を進めていくとHerokuへのデプロイ(プログラムをHerokuへ配備する)作業でエラーとなってしまうことの解決方法になります。
HerokuというかPasSやSasSなどについてはいつかはまとめておきたいですね。
と、また話しがそれてしまいそうでした…
問題の箇所は「1.5.2 Herokuにデプロイする(1)」になります。
Herokuにでデプロイするために以下のコマンドを実行します。
1 |
$ git push heroku master |
すると以下のようなメッセージが表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Counting objects: 111, done. Compressing objects: 100% (93/93), done. Writing objects: 100% (111/111), 149.80 KiB | 3.48 MiB/s, done. Total 111 (delta 7), reused 0 (delta 0) remote: Compressing source files... done. remote: Building source: remote: remote: -----> Building on the Heroku-20 stack remote: ! Warning: Multiple default buildpacks reported the ability to handle this app. The first buildpack in the list below will be used. remote: Detected buildpacks: Ruby,Node.js remote: See https://devcenter.heroku.com/articles/buildpacks#buildpack-detect-order remote: -----> Ruby app detected remote: -----> Installing bundler 1.17.3 remote: -----> Removing BUNDLED WITH version in the Gemfile.lock remote: -----> Compiling Ruby/Rails remote: Command: 'set -o pipefail; curl -L --fail --retry 5 --retry-delay 1 --connect-timeout 3 --max-time 30 https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/heroku-20/ruby-2.6.3.tgz -s -o - | tar zxf - ' failed on attempt 1 of 3. remote: Command: 'set -o pipefail; curl -L --fail --retry 5 --retry-delay 1 --connect-timeout 3 --max-time 30 https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/heroku-20/ruby-2.6.3.tgz -s -o - | tar zxf - ' failed on attempt 2 of 3. remote: 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 remote: ! remote: ! Push rejected, failed to compile Ruby app. remote: remote: ! Push failed remote: Verifying deploy... remote: remote: ! Push rejected to damp-springs-60234. remote: To https://git.heroku.com/damp-springs-60234.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'https://git.heroku.com/damp-springs-60234.git' |
英語で全然分かりませんが、
Ruby2.6.3は最新のHeroku-20には入ってませんよ。Ruby2.6.3が使えるのはCedar-14、Heroku-16、Heroku-18ですよ。的なことを言われてHerokuへのデプロイは失敗します。
ここで僕はRubyのバージョンを上げようと思ったのですが、中々Heroku-20がサポートしているRubyのバージョンに辿り着けず、HerokuをHeroku-18にすることにしました。
HerokuをHeroku-18に切り替える
HerokuをHeroku-18に切り替えるにはターミナルで以下を実行します。
1 2 3 |
$ heroku login --interactive // 実行後にエンターしてログイン $ heroku stack:set heroku-18 // stackを heroku-18 に下げる $ git push heroku master // デプロイ |
真ん中のコマンドが実際にHerokuをstack18に下げるコマンドになります。
これをやれば問題なくHerokuへのデプロイが完了します。
それでもうまくいかない方
それでもうまくいかない方は、自分の以前の記事も参考になるかもしれません。
是非見てみてください。
まとめ
いかがだったでしょうか?
2020年2月時点でRailsチュートリアルを始めた方は、必ず躓くポイントにです。
Railsでのアプリ開発をできるようにということに注力するのであれば、Herokuへのデプロイはとばして進めても良いですが、エラーにぶち当たったときは自分自信を成長させるチャンスと思ってエラー解消にトライしてみましょう!
Railsチュートリアルの1章で挫折する方が1人でも減ればと幸いです。
Railsの中で使用されるRubyの本になります。
Railsチュートリアルをやる前にRubyはProgateなどで学習している方も多いかと思いますが、Progateからさらに発展したRubyの入門書になります。
RailsはRubyで記載するとはいえ、Rubyの文法にはあまり触れられないので、Railsチュートリアルを受けるための相棒としてオススメです。