zenet_logo

-株式会社ゼネット技術ブログ-

RailsからRDS(MySQL)のDBに接続できなかった話

f:id:zenet-tech:20210317101112p:plain

こんにちは。システム事業部の大柳です。

Rails+MySQLな構成でEC2にデプロイしたときに、DBにつながらず苦戦したので状況と解消方法を書き留めます。

システム構成

  1. Ruby: ver2.4.2

  2. Rails: ver 5.1

  3. MySQL: ver 5.6 (Amazon RDS)

状況

ソースをクローンしてきて、bundle install してrails s で起動を行うところでした。

起動してみると

Mysql2::Error - Access denied for user '******'@'*****' (using password: YES):

どうやらパスワードが間違っているようです。

database.yml をみなおしてみました。

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  pool: 5
  host: <%= ENV['DB_HOST'] %>
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>
  database: <%= ENV['DB_DATABASE'] %>

ENV['XXXX'] とかは環境変数に定義してあるのを拾ってきます。

環境変数を確認してみましたが、ちゃんと設定されていました。

exec $SHELL --login で反映し直しましたがだめでした。

そこで試しにmysqlコマンドでつながるのか試しました。

mysql -u USER -h HOST -p DATABASE

すると

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 233893
Server version: 5.6.39-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

つながりました・・!

以上のことからrails側のDBの設定がどこかしらおかしいことがわかりました。

その後いろいろ試してはみたものの原因が全然わからず・・・・

上司や同僚に電話して助けを乞ったところ

上司「わかったよ」

私「え?!ほんとですか!ありがとうございます!どんな内容でしたか??」

解決したdatabase.ymlがこちら

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  pool: 5
  host: <%= ENV['DB_HOST'] %>
  username: <%= ENV['DB_USERNAME'] %>
  password: "<%= ENV['DB_PASSWORD'] %>"
  database: <%= ENV['DB_DATABASE'] %>

結論をいうと、原因はパスワードに「#」が含まれていたためでした。

「#」が含まれていると何がだめなのかというと、yamlファイルのきまりで「#」以降が コメントアウト になります。

つまり「#Password」というパスワードだっとするとrails''空文字と認識します。

そりゃあ何度やってもパスワードが間違っていると怒られるわけです・・・。

超初歩的な問題でした。

次回からは気をつけたいと思います。