🎅

【Rails】MySQLの接続に失敗した事例

2023/12/25に公開

ポートフォリオ修正後にMySQLの接続に失敗した事例を今後同じことが起きないようにここで復習します。

事例

今回のエラーは、修正後に本番環境にてgit pullをして、接続を遮断後、再度rails s -e productionにてサーバーを起動させようとした際に発生しました。

エラー内容

rails s -e productionコマンド入力後に下記のエラー文が表示されました。

ActiveRecord::ConnectionNotEstablished

こちらのエラー文は、MySQLの接続に失敗していることを示しています。
MySQLサーバーが正しく起動していることは確認ができているのになぜ接続できないのか?

原因

原因は以前記事で投稿した.envファイルの修正時にEC2上のアプリケーションに直接アップロードをする手順が抜けていたことが原因でした。
https://zenn.dev/sudoukky/articles/10152c3a52d095
こちらの手順が抜けることにより、EC2上にcloneしてきたアプリケーションには.envファイルが存在しないため、database.ymlに記載している環境変数が空になってしまいデータベースとの接続ができません。

database.yml
:
:
production:
  <<: *default
  database: <%= ENV['DB_DATABASE'] %>
  adapter: mysql2
  encoding: utf8mb4
  charset: utf8mb4
  collation: utf8mb4_general_ci
  host: <%= ENV['DB_HOST'] %>
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>
:
:

上記のようにdatabase.ymlに記載している環境変数を利用してデータベースとの接続をしているので.envファイルをEC2上のアプリケーションに直接アップロードをしてあげないと環境変数が空になってしまいます。

解決方法

先ほどの記事で.envファイルを作成し、.gitignoreへの記述をした後にEC2上のアプリケーションに.envをコピーする手順が必要になります。

username:~/environment/アプリケーション名 $ scp -i ~/.ssh/practice-aws.pem .env ec2-user@IPアドレス:GitHubのリポジトリ名/

これで問題なくデータベースとの接続ができ、サーバーを立ち上げることができます。

今回の事例での考え方

今回のように、ActiveRecord::ConnectionNotEstablishedというエラーが見受けられた場合は、Railsアプリケーションがデータベースに接続できない場合に発生するエラーということを認識する必要があります。
そして、下記のような原因から発生するエラーのため注意が必要です。

  • データベースサーバーが起動していないか、接続可能な状態ではない場合。
  • データベースの設定が正しくない場合、たとえばホスト名やポート番号が間違っている場合。
  • データベースへの接続に必要な認証情報が不正確である場合、たとえばユーザー名やパスワードが間違っている場合。

まずは上記の原因から絞っていき、解決策を考えることが必要になります。

Discussion