イントロ
この記事は、RailsアプリケーションをAWS EC2インスタンスへデプロイしようとした際に直面した一つの問題とその解決方法について説明します。
発生した問題
CapistranoがGitのデフォルトブランチ名の変更(masterからmainへ)を反映していないことから生じる
fatal: not a valid object name: master
というエラーメッセージが表示される問題です。
本記事の対象となる読者
- RailsアプリケーションをEC2にデプロイしようとしている開発者
- Capistranoを使ってデプロイの自動化を行っている開発者
- Gitのデフォルトブランチ名の変更により生じる問題に直面している開発者
それでは、まずは問題の発生から詳しく見ていきましょう。
問題発生: fatal: not a valid object name: master
私が最初にこの問題に直面したのは、Capistranoを使ってRailsアプリケーションをAWS EC2インスタンスにデプロイしようとしたときでした。デプロイを実行すると、次のようなエラーメッセージが表示されました。
fatal: not a valid object name: master
masterというワードは、Gitのデフォルトのブランチ名を指します。
しかし、私の場合、ローカルリポジトリではデフォルトブランチの名前がmainになっていました。
そのため、Gitがmasterブランチを見つけられず、上記のエラーが生じていたのです。
ブランチ名が違う理由
この問題は、2020年10月以降にGitHubが新規リポジトリのデフォルトブランチ名をmasterからmainに変更したことに原因です。この変更は、新規に作成されるリポジトリに対してのみ適用され、既存のリポジトリには影響を及ぼさないため、分かりづらいです。
それでは、次の章では、この問題を解決するために私が試した手順を詳しく説明していきます。
解決のためにやったこと: ブランチ名の調整
deploy.rbファイルに「ブランチ名はmain」ということを明記する
解決策は、Capistranoに自分がmainブランチを使っていることを明示的に伝えることでした。
具体的には、deploy.rbファイルに以下の行を追加しました。
//末尾に追記
set :branch, 'main'
この行を追加することで、Capistranoはブランチ名が「main」ということを理解します。
この変更を加えた後、再度デプロイコマンド
bundle exec cap production deploy
を実行しました。
結果:デプロイ成功
まずここまでやったことは、
- deploy.rbファイルの末尾に
set :branch, 'main'
を追記 - リモートリポジトリにプッシュ
- デプロイコマンド
bundle exec cap production deploy
をローカルで実行
このコマンドを再度実行することで、新たに追加された設定が反映され、CapistranoがGitHubリポジトリのmainブランチからソースコードを取得しようとします。
これでデプロイは成功です。
新しい設定が正しく反映され、CapistranoはGitHubからソースコードを正しく取得し、AWSのEC2サーバーに適切にデプロイすることができました。
まさしくその通りです!それでは最後の章、第5章に移りましょう。
学び:バージョンによるエラーに初心者はヒヨる
今回の問題は、Capistranoの設定がデフォルトのブランチ名(master)に対して行われていたために発生しました。しかし、私のGitHubリポジトリでは、デフォルトのブランチ名がmainに変更されていました。その結果、Capistranoは存在しないブランチからソースコードを取得しようとして失敗し、デプロイがうまくいかなかったのです。
この問題は比較的簡単に解決できました。Capistranoの設定ファイルを更新し、正しいブランチ名を指定することで、ツールは再び正常に動作しました。
この経験を通じて、私たちは以下のことを学びました。
- プログラミング学習初心者はバージョンの違いによるエラーに弱い
- 仮説を立てて確認として誰かに聞くのが重要
以上です。あなたが同様の問題に遭遇したときの助けになれば幸いです。
そして、最後になりましたが、何か質問やフィードバックがあれば、ぜひコメントでお知らせください。あなたの意見をお待ちしています!