#概要
Railsチュートリアルにて
###1.5.2 Herokuにデプロイする(1)
ここの前段階までを終わらせていることが前提
Railsチュートリアルを始めて、Herokuへのデプロイに躓いた(最後のpushコマンドエラー)ので2周目でも同じことをしないために備忘録としての簡単なメモ。
今まではDockerなどを使いローカルでサーバーを立ち上げなどは行なってきたが本番環境にデプロイするのは初めてのこと。
公式ページに載っているエラーとは別物だったが落ち着き払って、エラー文を読み解くことで何に頼ることもなく解決ができた。(初心者からしたらとても大きな一歩)
#実際のエラー
$ git push heroku master
Enumerating objects: 9858, done.
Counting objects: 100% (9858/9858), done.
Delta compression using up to 8 threads
Compressing objects: 100% (6779/6779), done.
Writing objects: 100% (9858/9858), 31.74 MiB | 7.80 MiB/s, done.
Total 9858 (delta 2483), reused 9848 (delta 2479), pack-reused 0
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-20 stack
remote: -----> Determining which buildpack to use for this app
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 2.2.16
remote: -----> Removing BUNDLED WITH version in the Gemfile.lock
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.6.6
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.
remote:
remote: !
remote: ! Failed to install gems via Bundler.
remote: !
remote: ! Push rejected, failed to compile Ruby app.
remote:
remote: ! Push failed
remote: !
remote: ! ## Warning - The same version of this code has already been built: 1d2acef39bb4522b0be81c5c574ce9b5d1c8d2c7
remote: !
remote: ! We have detected that you have triggered a build from source code with version 1d2acef39bb4522b0be81c5c574ce9b5d1c8d2c7
remote: ! at least twice. One common cause of this behavior is attempting to deploy code from a different branch.
remote: !
remote: ! If you are developing on a branch and deploying via git you must run:
remote: !
remote: ! git push heroku <branchname>:main
remote: !
remote: ! This article goes into details on the behavior:
remote: ! https://devcenter.heroku.com/articles/duplicate-build-version
remote:
remote: Verifying deploy...
remote:
remote: ! Push rejected to peaceful-shelf-41437.
remote:
To https://git.heroku.com/peaceful-shelf-41437.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/peaceful-shelf-41437.git'
今回の場合、注目するべき点はここで
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.
雑に超ざっくり訳すと、「あなたがお使いのバンドラーがサポートしているプラットフォームは"x86_64-darwin-20"のみだが、現在のこのローカル環境では"x86_64-linux"が使われている。なので"x86_64-linux"でも動作できるようにlockfileに記述してもう一度トライしてくれ。」と、ご丁寧に解決するためのコマンドまで教えてくれていた。
#解決編 (1)
・エラー文での指示通りにコマンドを実行
$ bundle lock --add-platform x86_64-linux
Gemfile.lockを覗いてみると
105 nokogiri (1.11.3-x86_64-darwin)↲
106 racc (~> 1.4)↲
107 nokogiri (1.11.3-x86_64-linux)↲
108 racc (~> 1.4)↲
元から記述されてた(であろう)darwinの下に先ほど追加したlinuxがちゃんと記述されてる!
・Gemfileを書き換えたのでRailsチュートリアルでの教えに倣って再度以下のコマンドを実行
$ bundle install --without production
・コミットコマンドを実行
$ git commit -a -m "Modify the Gemfile.lock"
・再度デプロイにチャレンジ
$ git push heroku master
.
.
remote: Verifying deploy... done.
#解決編 (2)
失礼、その2はありません。以上でおしまいです。
(やりたかっただけ)
#おまけ
無事にデプロイが完了すると、生成されたURLをコピーしてブラウザで開くことが出来る。以下が実際の表示ページ
renderメソッドエラー起こしてた。
追記
上記は単なるrenderメソッドの記述ミスなどによるエラーだと思っていたが、デプロイ時に生成されるURLが違うためであった。
デプロイ成功時に最下部に表示される、https: //git.heroku... から始まるURLではなく、
ログの最後の方に出てくる、https://アプリ名.herokuapp で始まるURLが正しいものであった。
完