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

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

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

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

AWS(Amazon Web Services)

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

Q&A

0回答

732閲覧

unicornでデプロイ時発生したエラー解決について Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

momonga0714

総合スコア7

Ruby on Rails

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

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2020/04/16 23:18

前提・実現したいこと

作ったアプリケーションのデプロイ作業を行うことが目的です。
AWSです。
Capistranoではまだ行っておらず、

[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

こんな形でユニコーンの起動を行おうとしております。

[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ rails db:create RAILS_ENV=production Created database '<データベース名>' [ec2-user@ip-172-31-23-189 <リポジトリ名>]$ rails db:migrate RAILS_ENV=production

これらも実行できており、エラーは起きておりません。
mysqlも起動できております。
nginxも起動できております。
githubにもプッシュできております。
念のため、

git pull origin master

しております。
EC2インスタンスに環境変数の設定は完了しております。

ただ、疑問点としては、

エラー文にあるソケットの

socket '/tmp/mysql.sock'


database.ymlに記載のソケットの位置の

socket: /var/lib/mysql/mysql.sock

が違うため、おそらくこれが原因ではないかと考えておりますが、
対策がわかりません。

おそらくdatabase.ymlの

default: &default adapter: mysql2 encoding: utf8 pool: 5 username: root password: socket: /tmp/mysql.sock

こっちのソケットを読み込もうとしてしまっているのだろうか、という疑問点はあります。

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

[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D master failed to start, check stderr log for details

というのがターミナル上で出て

[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ less log/unicorn.stderr.log

これを実行し、エラー内容を確認すると

I, [2020-04-15T06:42:59.713364 #28024] INFO -- : Refreshing Gem list I, [2020-04-15T06:43:02.138532 #28024] INFO -- : listening on addr=0.0.0.0:3000 fd=10 E, [2020-04-15T06:43:02.139052 #28024] ERROR -- : Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql2::Error::ConnectionError) /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/mysql2_adapter.rb:25:in `new' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/mysql2_adapter.rb:25:in `mysql2_connection' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:729:in `new_connection' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:773:in `checkout_new_connection' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:752:in `try_to_checkout_new_connection' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:713:in `acquire_connection' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:490:in `checkout' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:364:in `connection' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.0.7.2/lib/active_record/connection_adapters/abstract/connection_

こうなり、

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

この様なエラーが現れ、対処に苦しんでおります。

ちなみに、 < elastic ip >:3000にアクセスすると、

The page you were looking for doesn't exist. You may have mistyped the address or the page may have moved. If you are the application owner check the logs for more information.

となります。

該当のソースコード

database.yml

production: <<: *default database: sfc-b_production username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock

unicorn.rb

app_path = File.expand_path('../../', __FILE__) worker_processes 1 working_directory app_path pid "#{app_path}/tmp/pids/unicorn.pid" listen 3000 stderr_path "#{app_path}/log/unicorn.stderr.log" stdout_path "#{app_path}/log/unicorn.stdout.log" timeout 60 preload_app true GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true check_client_connection false run_once = true before_fork do |server, worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect! if run_once run_once = false # prevent from firing again end old_pid = "#{server.config[:pid]}.oldbin" if File.exist?(old_pid) && server.pid != old_pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH => e logger.error e end end end after_fork do |_server, _worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection end

試したこと

1 mysql の再起動
2 nginx の再起動
3 ソケット位置の確認
4 ローカル上で出ていた、動作上での軽微なエラーの修正
5 検証用の新しいアプリを作って、比較検証
6 インスタンスの再作成
7 シークレットキーベースの再設定
8 EC2側の再起動
9 routesの確認(表示画面から)
10 Node.jsのバージョン変更(関係ないかもしれませんが、古くなっているよ、worningとでていたため)
11 database.yml記載のソケットの位置に整合性があるかどうか確認
12 強行突破し、Capistranoでの実行(当たり前ですが失敗)

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

ruby 2.5.1
Rails 5.0.7.2

知識も検索力も浅はかで、不明点が多く、至らぬ質問となってしまい申し訳ございません。
しかしながら、このエラーと対峙するのに少し時間がをかけすぎてしまいました。
ここまで、デプロイする上で、databaseがcreateできなかったり、migrateできなかったりとありましたが、
それについては解決できました。
しかし、このエラーについては、検索しても多様な内容のエラーが多々あり、どれが該当しているのか
理解することができず、手の打ちようが、「再度同内容を確認する」ことくらいしか思い当たらず、今回投稿させていただきました。
何卒お力添えのほど、よろしくお願いいたします。
また、必要なコードなどについても公開させていただきますので、ご連絡いただけましたら幸いです。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問