こんにちは。システム事業部の大柳です。
Rails+MySQLな構成でEC2にデプロイしたときに、DBにつながらず苦戦したので状況と解消方法を書き留めます。
システム構成
状況
ソースをクローンしてきて、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は''
空文字と認識します。
そりゃあ何度やってもパスワードが間違っていると怒られるわけです・・・。
超初歩的な問題でした。
次回からは気をつけたいと思います。