#はじめに
本記事は教材をもとにアプリ作成初心者がRailsで作成したアプリをGitを使い、Herokuへデプロイした記事になります。
手順通り進めたつもりですが、エラー連続で試行錯誤してなんとかデプロイに成功した際の対処法をまとめたものになるのであらかじめご了承ください。
##環境及び前提条件
Railsでのアプリ作成は前提としております。
-
Ruby 3.0.1
-
Rails 6.0.3.6
-
mac os Big Sur
##Herokuへアカウント登録
下記URLからアカウント登録。
https://signup.heroku.com/jp
##Heroku CLI をインストールして設定
今回はHoebrewからインストールしていく為、
ターミナルにて下記コマンドを入力。
brew tap heroku/brew && brew install heroku # HerokuCLIをインストール
Heroku CLI のインストールが完了したらアップロードしたいディレクトリに移動して、
ターミナルからコマンドを入力しログイン。
cd [アプリ名] #アプリ名にはRailsで作成したアプリ名を入れます。
#cd を使うことで選択したディレクトリに移動出来ます。
heroku login #herokuにログイン
下記コマンドが表示されるので登録した email,password を入力します。
後登録したemailが表示されたらログイン完了です。
Enter your Heroku credentials:
Email: # emailを記入
Password: # passwordを記入
Logged in as # 登録したメールアドレスが表示
##Gemfile の設定
Rails アプリ作成でのローカル環境ではデフォルトで SQLite 3 が設定されているが Heroku での本番環境ではpostgreSQL 使うため為 ターミナルでコマンドを入力し postgreSQL をインストール。
brew install postgresql #postgreSQLをインストール
インストール完了後、本番環境で postgreSQL を適応させる為に
Gemfile に新しく[gem 'pg', group: :production]を追加、
[gem 'sqlite3', '~>1.3.6'] を [gem 'sqlite3', '~>1.3.6', group: :development ] に編集しインストール。
gem 'pg', group: :production #一行新しく追加
#加えることで本番環境にpostgreSQLを設定
gem 'sqlite3', '~>1.3.6', group: :development #group: :development を追加
#加えることでローカル環境にSQLite3を設定
ターミナルでコマンドを実行し Gemfile.lock に反映させる。
bundle install --without production
##Git を使って Heroku にデプロイ
git add . #追加するファイルを全て選択
$ git commit -m "[コミットメッセージ]" #選択したファイルをコミット [コミットメッセージはわかりやすいもの]
$ git push heroku master #リモートリポジトリにアップロード
本番環境のデータベースを作成して完了。
heroku run rails db:migrate
のはずが、git push でエラー...。
###エラー対策
本来はここでデプロイできるはずのようですが、僕は出来ません出した...。
エラーメッセージ
remote: !
remote: ! Failed to install gems via Bundler.
remote: !
remote: ! Push rejected, failed to compile Ruby app.
remote:
remote: ! Push failed
remote: Verifying deploy...
remote:
remote: ! Push rejected to fathomless-falls-63173.
remote:
To https://git.heroku.com/fathomless-falls-63173.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/fathomless-falls-63173.git'
Gem をインストール出来ませんでしたとのこと。 その為、Gemfileを確認。
本番環境の設定が悪いのかと思い書き換えてみる。
もう一度 bundle install --without production で反映する。
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
gem 'sqlite3', '~> 1.4'
end
group :production do
gem 'pg'
end
やはりそれだけでは上手くいかず。Googleで調べてみると datebase.yml も書き換える必要があるとの事。
確認してみると、本番環境(production)のデフォルトが sqlite3 のままになっている為、PostgreSQLに変更して、もう一度 bundle install --without production で反映する。
production:
<<: *default
adapter: postgresql
encoding: unicode
pool: 5
またしても上手くいかず...。 エラーメッセージも変わらず bundle が引っかかっているのは間違いなさそうですが、原因が分からず。 もう一度他の案を検索。 するとHerokuが指定しているバージョン以外のbundlerではデプロイ出来ないとの記事を発見。
こちらになります。 https://310nae.com/heroku-bundler/
そんなエラー出てたかなと思いもう一度ターミナルを確認してみると上の方にバージョンのことが書いてありました。
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-3.0.1
remote: -----> Installing dependencies using bundler 2.2.16
bundle -v でバージョンを確認してみると、2.2.15 でした...。
これか!と思い読んでみると、バージョンは合わせてくれる模様。
知れべてみると、 Ruby2.6.0 以降は自動的にバージョンが決定される様です!
参照記事:https://techracho.bpsinc.jp/hachi8833/2020_04_09/90793
その後も一通り実行文を読んでみると、気になる点が。
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.
こちらも違うようなことが書いてあるので、 and try again. と言われた通り実行してみる。
bundle lock --add-platform x86_64-linux
エラー文を一通り読み、問題なさそうでしたので再びgit push
する。
やっとデプロイ出来ました...。
正直gitのこともあまり分からない状態でアプリ作成からデプロイを初めて取り組んでしまったので、何が原因だったのかわからずかなり躓きました。
対処法も間違っているところもあるかも知れませんので参考にはならないかも知れませんが、ポイントでエラー文の対策として誰かの役に立てたら幸いです。
もしご指摘、アドバイスありましたらご教授お願いします。
##今回学んだ事
-
Git の知識が足りない
-
Heroku の知識が足りない
-
remote! 以外の文脈にもヒントがある
-
エラー文検索の際のワード選びが重要
-
総合的に全て未熟
###今後について
- Git SQL の学習も必要だが Rails の知識も足りないと感じたため基礎固めをする。