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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

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回答

1918閲覧

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)を解決したい

k-hayashi

総合スコア13

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

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クリップ

投稿2021/10/20 12:57

前提・実現したいこと

タイトルのとおりです。
こちらを参考にAWSでのデプロイをており、デプロイ自体はできましたが、ローカルでrailsを開こうとすると、下記のようなエラーメッセージが出てきます。なお、デプロイ前はdocker-compose upでなんのエラーもなく、railsの平和な画像が出ていました。

発生している問題・エラーメッセージ

Mysql2::Error::ConnectionError Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) Extracted source (around line #90): conn_attrs = parse_connect_attrs(opts[:connect_attrs]) connect user, pass, host, port, database, socket, flags, conn_attrs end def parse_ssl_mode(mode)

該当のソースコード

database.yml default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password socket: /tmp/mysql.sock #host: db development: <<: *default database: gomisutenavi_development # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: gomisutenavi_test # As with config/secrets.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. # # Instead, provide the password as a unix environment variable when you boot # the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database # for a full rundown on how to provide these environment variables in a # production deployment. # # On Heroku and other platform providers, you may have a full connection URL # available as an environment variable. For example: # # DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase" # # You can use this database configuration with: # # production: # url: <%= ENV['DATABASE_URL'] %> # production: <<: *default database: gomisutenavi_production username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock
docker-compose.yml version: '3' services: db: image: mysql:5.7 platform: linux/x86_64 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: root ports: - "3306:3306" web: build: . command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/gomisutenavi ports: - "3000:3000" links: - db
Dockerfile FROM ruby:2.5.8 RUN apt-get update -qq && \ apt-get install -y build-essential \ libpq-dev \ nodejs RUN mkdir /gomisutenavi ENV APP_ROOT /gomisutenavi WORKDIR $APP_ROOT ADD ./Gemfile $APP_ROOT/Gemfile ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock RUN bundle install ADD . $APP_ROOT

試したこと

解決するために試した記事
mysqlのsocketエラーでrailsアプリが起動できない
Rails アプリ起動時のMysqlエラー を解消
Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’のエラーを解消するためのヒント

補足情報(FW/ツールのバージョンなど)

ruby 2.5.8
rails 5.2.6
docker-compose 1.29.2
docker 20.10.8

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

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

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

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

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

guest

回答1

0

ベストアンサー

なんか変ですね、
database.ymlでは socket: /var/lib/mysql/mysql.sock
エラーは '/tmp/mysql.sock'
productionで立ち上げてますか?

投稿2021/10/20 13:20

winterboum

総合スコア23329

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

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

k-hayashi

2021/10/21 11:59

productionの指定はしていないので恐らくdevelopmentで立ち上がっていると思います。
winterboum

2021/10/21 22:47

AWSでうごかすなら、productionにしましょう
k-hayashi

2021/10/22 10:57

ローカルもproductionにしないと動かないということでしょうか?
winterboum

2021/10/22 11:03

え? あ、エラーはlocalかごめんなさい勘違い。AWSでのエラーかと思ってました (localで動いて、デプロイ先で動かない って相談が普通なので) database.yml に書いたのとmysqlが待ってるのとでsocketが一致していないんです。 ですので mysql_config --socket の結果で database.ymlを書き直してください
k-hayashi

2021/10/22 11:57 編集

デプロイする前は普通に動いていました。 恐らくdatabase.ymlのproductionを本番環境ようにいじってからが上手くいっていないのかなと。 mysql_config --socketをしたところ/tmp/mysql.sockが返ってきましたので、database.ymlのproductionのsocketを/tmp/mysql.sockに変更したのですが、 Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)のエラーが出ました。 そこで、touch /var/run/mysqld/mysqld.sockをしたのですが、 touch: cannot touch '/var/run/mysqld/mysqld.sock': No such file or directory と出て、ファイルを作成できません。
winterboum

2021/10/22 12:03

localではdevelopmentで動いているとおもうので、productionではなくdevelopmentの socket を直してください
k-hayashi

2021/10/22 12:40 編集

productionを/var/lib/mysql/mysql.sockに直し、 developmentに/tmp/mysql.sockを記述するも Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)が返ってきます。 developmentとtestの両方、testのみ、defaultのみにそれぞれ/tmp/mysql.sockを試してみましたが、同じエラーです。 ちなみにmysql -u root -pでパスワードを入力したら普通に起動しますし、mysql.server restartをしても普通にSUCCESSになります。 それと念の為EC2でもrails db:create RAILS_ENV=productionをしたのですが、こちらでも Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)が返ってきました。 mysql_config --socketで返ってきた値をproductionのsocketに記述したのですが、やはり同いエラーが返ってきます。
winterboum

2021/10/22 13:25

mysql は localで動いていますか、Dockerで動いていますか?
k-hayashi

2021/10/23 00:00 編集

dockerで動いています。 docker-compose runが必要でした。 EC2はそれで何とか動きました(正確に言うと別のエラーが出たのですが)。
winterboum

2021/10/23 02:37

ですと host: db ってのが必要じゃなかったかな
k-hayashi

2021/10/23 02:49

おっしゃるとおりhost: dbのコメントアウトを消したら接続しました。ありがとうございます。 単純にhostがなかったから接続する場所がなかったからと言うことでしょうか?
winterboum

2021/10/23 02:59

host が無いときは localhost とみなされます。 Dockerは別hostですから
k-hayashi

2021/10/23 05:29

そうなんですね。ありがとうございます。おかげさまで解決できました。
k-hayashi

2021/10/23 05:29

こちらベストアンサーにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問