AWSにてデプロイを行おうとするとエラーが出ます。
RDSにて接続しています。
デプロイする前のサーバー起動準備として、
$ bundle exec rails db:migrate RAILS_ENV=production
とコマンドを打つと
Mysql2::Error::ConnectionError: Lost connection to MySQL server at 'reading initial communication packet', system error: 104
のエラーが出ます。
様々なサイト参考にさせていただいたのですが解決せず、こちらで質問させていただきます。
また、detabase.ymlの設定が間違っている可能性が高いらしいため
ファイルのproductionに関する部分ものせておきます。
production: <<: *default database: <%= ENV['データベース名'] %> adapter: mysql2 encoding: utf8mb4 charset: utf8mb4 collation: utf8mb4_general_ci host: <%= ENV['エンドポイント名'] %> username: <%= ENV['ユーザ名'] %> password: <%= ENV['パスワード'] %>
よろしくお願いいたします。
database.ymlで設定しているDBサーバについて、database.ymlで使用しているユーザの情報を使ってEC2上からMySQLクライアントで接続することはできますか?
ご連絡ありがとうございます。
はい、EC2のアプリケーションディレクトリ上から
mysql -u root -p -h 'エンドポイント'
↓
password入力
でmysqlに接続はできます。
では、database.ymlで設定している環境変数はどのように設定していますか?
申し訳ございません。
初学者なもので環境変数の設定をどの部分でしているのかわからないのですが、production:以下の'〇〇'の部分以外は全て下のような記述になっております。
production:
<<: *default
database: <%= ENV['DB識別子名'] %>
adapter: mysql2
encoding: utf8mb4
charset: utf8mb4
collation: utf8mb4_general_ci
host: <%= ENV['エンドポイント名'] %>
username: <%= ENV['root'] %>
password: <%= ENV['パスワード'] %>
今調べていて気づいたのですが、database.ymlの環境変数を使用する部分は直接パスワードなどを書くのではなくcredentialsやコマンドにて代入するのでしょうか?!
また、直接database.ymlに書いてしまった場合にエラーが起こりうるのでしょうか?質問ばかりで申し訳ございません。
自分でも色々調べてみます。
環境変数の設定を.env内にて再度行ったところ、エラーが変わりました。
以下は.env内のコードです。
DB_USERNAME="root"
DB_PASSWORD="password"
DB_HOST="エンドポイント名"
DB_DATABASE="DB識別子名"
以下、エラーです。
Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
↑上のエラーが出たのち、
database.ymlに以下の追記をしたところ
socket: /var/lib/mysql/mysql.sock
また最初のエラーに戻りました。
RDSに接続したいのだから、localのMySQL Serverのソケットを設定したらおかしくなりませんか?
yu_1985さん、2問に渡り長い時間お付き合いいただきありがとうございます。
RDSの接続が間違っている可能性が高いという事でしたので、接続情報をもう一度確認してみます。
回答1件
あなたの回答
tips
プレビュー