某スクールの最終課題をEC2でデプロイする時に発生した事象。(RenderからEC2への移行)
EC2にクローンしたアプリを起動する為に必要なgemをインストールする際に、
上手くインストールが出来ず解決にかなり時間を費やしてしまった為、
備忘録として以下にエラーの詳細と解決方法を記述しておきたいと思います。
発生したエラー
先ず、ローカル環境「bunder2.1.4」と同じバージョンのbundlerをEC2側でも導入する為に、下記コマンドを実行。
[ec2-user@ip-***-**-**-*** <リポジトリ名>]$ gem install bundler -v 2.1.4
[ec2-user@ip-***-**-**-*** <リポジトリ名>]$ bundle install
すると、下記エラーメッセージが出現。
メッセージの内容はターミナル上でpgのバージョン'1.4.5'を導入する必要があるとのこと。
An error occurred while installing pg (1.4.5), and Bundler cannot continue.
Make sure that `gem install pg -v '1.4.5' --source 'https://rubygems.org/'`succeeds before bundling.
EC2内ターミナルで指定バージョンのpgのインストールを実行したところ、別のエラーメッセージ「Your PostgreSQL is too old. Either install an older version of this gem or upgrade your database to at least PostgreSQL-9.3.(PostgreSQLのバージョンが古すぎるので、せめて9.3にアップグレードしなさい)」が出てきました。
[ec2-user@ip-***-**-**-*** <リポジトリ名>]$ gem install pg -v '1.4.5'
Building native extensions. This could take a while...
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.
<省略>
Your PostgreSQL is too old. Either install an older version of this gem or upgrade your database to at least PostgreSQL-9.3.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details.You may need configuration options.
エラーの原因
そもそも、EC2ではデータベースにPostgreSQLではなく、MariaDBを使用してデプロイしようとしていたはずなので、PostgreSQLは不要になるのでは?と考え、Render使用時用としてGemfileに記載していた「gem 'pg'」を削除したところ、正常にEC2内でgemをインストールすることができました。やはり、「gem 'pg'」がgemfileに残っていたことが原因だと考えます。
解決方法
実際に行った手順の詳細は以下の通りです。
①Gemfileで、「gem 'pg'」の記述を削除
②VScodeからGemfile.lockを右クリックで削除、ローカル環境の最終課題アプリでbundle installを実行
③GitHubにコミットとプッシュ
④EC2環境でpull (コマンド: git pull origin main or git pull origin master)
⑤EC2環境でbundle install