質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1469閲覧

AWSにデプロイしたアプリが「Mysql2::Error::ConnectionError」になる

genki0126

総合スコア33

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2022/04/06 02:00

下記以外に必要な情報などがあればご教示ください

やりたいこと

下記の記事を参考にAWS上にRailsアプリをデプロイしようとしています。
APサーバ:EC2(Railsアプリ、Nginx)
DBサーバ:RDS(mysql)

https://zenn.dev/naoki_mochizuki/books/1471ce20222227/viewer/5ed983

症状

ブラウザから本番環境のIPアドレスを入力すると下記のエラーが発生している

Mysql2::Error::ConnectionError
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

環境設定

・アプリサーバにEC2を使用しており、DBはRDS上でmysqlを実行しています。
・mysql.sockの格納先の設定
/etc/my.cnf

[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock

試したこと

・EC2でコマンド「systemctl status mysqld」を実行
→下記のログが表示されるが、mysqlはEC2ではなくrds上で起動しているため正常?

Unit mysqld.service could not be found.

・コマンド「mysql -u [ユーザ名] -p -h mysql -h [エンドポイント] -u[ユーザ名] -p[パスワード]」を実行
→下記のログが表示されるので、mysql自体は起動していると思われる。

Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 6917 Server version: 8.0.27 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>

・ファイル「/var/lib/mysql/mysql.sock」を削除
→ログが下記に変わる

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

・ファイル「/var/lib/mysql/mysql.sock」を再作成して権限付与(chmod, chown)
→下記のログが表示

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
これrailsはローカルのmysqlを見に行っていませんか?

ec2でrailsをどのコマンドで起動しているかは分かりませんが、railsのdb設定ファイルを確認はしましたか?
rdsのurl設定もれや、本番も開発もlocalhostのmysqlを見に行くように設定されていませんか?

投稿2022/04/06 04:05

YuuT

総合スコア673

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

genki0126

2022/04/06 04:41 編集

ご指摘ありがとうございます。 railsのdb設定ファイルは「config/database.yml」のことでよろしいでしょうか? usrname,password,hostにはawsの情報を設定しています。(Credentialを使用) database.yml ``` production: database: deploy-test_production adapter: mysql2 encoding: utf8mb4 charset: utf8mb4 collation: utf8mb4_general_ci username: <%= Rails.application.credentials.db[:user_name] %> password: <%= Rails.application.credentials.db[:password] %> host: <%= Rails.application.credentials.db[:endpoint] %> pool: 20 timeout: 1000 socket: /var/lib/mysql/mysql.sock ``` アプリの起動は下記でnginxとpumaを起動しています。 sudo nginx bundle exec pumactl start database.yml以外でDBの参照先を設定する場所はありますか?
yu_1985

2022/04/06 05:48

RDSを見に行きたいならsocketの指定は余計では?
YuuT

2022/04/06 06:34

ありがとうございます。 config/database.ymlで問題ないです。 Rails.application.credentials.db[:endpoint]に関しては(少し失礼ですが)信じるしかないと思います。 例えば、起動コマンドが開発のままになってたり...とかはないですよね。 開発時にローカルにdbを持っていたか分かりませんが、クラウド上で実行する際にrails s -e productionで実行してなかったりとか。 production関連でちゃんと設定しているのでそれはないように感じますが... DBの参照先の設定はconfig/database.ymlしかないと思います。 あと思い当たるのは、Credential使用したことないので流してもらってよいですが、railsのcliを起動してRails.application.credentials.db[:endpoint] の値が間違っていないか確認ですかね。 (上記はできるか分かりません)
YuuT

2022/04/06 06:39

あ、pumactlで起動してるんですね。 多分config/puma.rbの設定を見に行っていると思うので、そこのenvironment ENV.fetch("RAILS_ENV") { "XXXX" }あたりですかね。 これがdevelopmentになっていないかとか。 まあ、ブラウザから:3000でアクセスしていればdevelopになっている可能性ありますが、80でアクセスしていればファイルの設定もちゃんとしているような気がします。
genki0126

2022/04/06 13:09 編集

yu_1985さん >RDSを見に行きたいならsocketの指定は余計では? ご指摘ありがとうございます。該当箇所を消して再起動してみた結果、状況変わりませんでした。 Yuuさん >多分config/puma.rbの設定を見に行っていると思うので、そこのenvironment ENV.fetch("RAILS_ENV") { >"XXXX" }あたりですかね。 >これがdevelopmentになっていないかとか。 ご指摘ありがとうございます。 おっしゃる通り、environment ENV.fetch("RAILS_ENV") { >"XXXX" }がdevelopmentになっていました! productionに修正して再起動したところ、「The page you were looking for doesn't exist.」の画面になってしまったのですが、DB設定自体は修正されたということでいいのでしょうか? ちなみにRailsアプリの初期画面を表示したいだけなので、ルーティング設定はしていません。 >まあ、ブラウザから:3000でアクセスしていればdevelopになっている可能性ありますが、80でアクセスしていればファイルの設定もちゃんとしているような気がします。 「80でアクセス」について詳細お聞きしてもよろしいでしょうか? 現状の確認方法としては、EC2にデプロイしているのでブラウザのアドレスバーにEC2のElasticIPを入力してアクセスしようとしています。
YuuT

2022/04/06 15:37

頂いたエラー「The page you were looking for doesn't exist.」で調べたところ、routes.rbにrootの設定をする必要があるという記事がありました。 root 'top#index'のような記述が必要のようです。 DBの接続に関しては、実際にDBにアクセスする動作を行わないとなんとも言えません。 (railsの仕様の詳細を把握しきれていないため回答できないというのが正直なところです) 80でアクセスに関しては、また私の勘違いかもしれません。 railsに直接アクセスする場合にはconfig/puma.rbの設定項目であるport ENV.fetch("PORT") { 3000 }の3000部分を80に変更する必要がありますが、nginx経由でアクセスするのであればこれは不要です。 忘れてください。 (今はEC2のIPにhttp(80番port)でアクセスすると、nginxがリクエストを受け取りlocalhost:3000(rails(puma))に流すような設定になっていると思います) (不明点あれば質問いただければ回答はできればと思っています)
genki0126

2022/04/07 10:56

>root 'top#index'のような記述が必要のようです。 情報提供ありがとうございます。画面を作って再度確認してみます。 これ以降は本題と変わってきそうなので、一旦解決とさせて頂きます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問