【Rails】MySQLの接続に失敗した事例
ポートフォリオ修正後にMySQLの接続に失敗した事例を今後同じことが起きないようにここで復習します。
事例
今回のエラーは、修正後に本番環境にてgit pull
をして、接続を遮断後、再度rails s -e production
にてサーバーを起動させようとした際に発生しました。
エラー内容
rails s -e production
コマンド入力後に下記のエラー文が表示されました。
ActiveRecord::ConnectionNotEstablished
こちらのエラー文は、MySQLの接続に失敗していることを示しています。
MySQLサーバーが正しく起動していることは確認ができているのになぜ接続できないのか?
原因
原因は以前記事で投稿した.envファイル
の修正時にEC2上のアプリケーションに直接アップロードをする手順が抜けていたことが原因でした。
こちらの手順が抜けることにより、EC2上にcloneしてきたアプリケーションには.envファイルが存在しないため、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