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

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

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

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

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

AWS(Amazon Web Services)

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

Q&A

0回答

1085閲覧

AWS My SQL エラーについて

ken1203

総合スコア24

Ruby on Rails 6

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

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2020/12/08 08:40

編集2022/01/12 10:55

前提・実現したいこと

前提
Ruby on Rails6にてアプリを作成
AWS amazon linux2
デプロイ作業を行いました

実現したいこと
本番環境でRailsを起動させたい

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

ターミナル [ec2-user@********** Dr_tetsu]$ less log/unicorn.stderr.log I, [2020-12-07T06:03:34.092137 #12835] INFO -- : Refreshing Gem list I, [2020-12-07T06:03:36.545685 #12835] INFO -- : listening on addr=0.0.0.0:3000 fd=11 E, [2020-12-07T06:03:36.546263 #12835] 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-6.0.3.4/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `new' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `mysql2_connection' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection' /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection'

該当するソースコード

database.yml # MySQL. Versions 5.5.8 and up are supported. # # Install the MySQL driver # gem install mysql2 # # Ensure the MySQL gem is defined in your Gemfile # gem 'mysql2' # # And be sure to use new-style password hashing: # https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html # default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: kenichi1203 socket: /tmp/mysql.sock development: <<: *default database: Dr_tetsu_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: Dr_tetsu_test # As with config/credentials.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 https://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: Dr_tetsu_production username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock

試したこと(仮説)

ERROR -- : Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

上記のエラー内容で検索行い下記のリンクを参考にしましたが変化はありませんでした。
リンク内容
リンク内容
リンク内容

仮説として上記のリンクを参照した際に

[ec2-user@******** Dr_tetsu]$ sudo mysql.server start sudo: mysql.server: コマンドが見つかりません

とMy SQL が起動していないのが原因なのでしょうか??

補足

初心者で言葉足らずで申し訳ありませんがご教示頂けたらと思い質問させて頂きました。
宜しくお願い致します。

補足2

/log/unicorn.stderr.log /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:205:in `pid=': Already running on PID:18695 (or pid=/var/www/Dr_tetsu/tmp/pids/unicorn.pid is stale) (ArgumentError) from /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/unicorn-5.4.1/lib/unicorn/http_server.rb:137:in `start' from /home/ec2-user/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/unicorn-5.4.1/bin/unicorn_rails:209:in `<top (required)>' from /home/ec2-user/.rbenv/versions/2.5.1/bin/unicorn_rails:23:in `load' from /home/ec2-user/.rbenv/versions/2.5.1/bin/unicorn_rails:23:in `<main>' I, [2020-12-10T06:22:53.949207 #18695] INFO -- : reaped #<Process::Status: pid 18699 exit 0> worker=0 I, [2020-12-10T06:22:53.949342 #18695] INFO -- : master complete I, [2020-12-10T06:22:57.328776 #18777] INFO -- : Refreshing Gem list I, [2020-12-10T06:22:58.956594 #18777] INFO -- : listening on addr=0.0.0.0:3000 fd=11 I, [2020-12-10T06:22:58.962392 #18777] INFO -- : master process ready I, [2020-12-10T06:22:58.967624 #18781] INFO -- : worker=0 ready I, [2020-12-10T06:25:16.316706 #18777] INFO -- : reaped #<Process::Status: pid 18781 exit 0> worker=0 I, [2020-12-10T06:25:16.316854 #18777] INFO -- : master complete I, [2020-12-10T06:25:50.238430 #18956] INFO -- : Refreshing Gem list I, [2020-12-10T06:25:51.895253 #18956] INFO -- : listening on addr=0.0.0.0:3000 fd=11 I, [2020-12-10T06:25:51.901216 #18956] INFO -- : master process ready :

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

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

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

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

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

yu_1985

2020/12/08 09:22

sudo systemctl status mysql と打つと何が表示されますか? あと、 https://teratail.com/questions/307288 での指摘が反映されてないですね…。 先の質問での指摘(というか、恐らく問題ではないかというところ)は ``` default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: kenichi1203 socket: /tmp/mysql.sock ``` 結局このようにdefaultのところに各環境で変えたい値を直書きしちゃってるので defaultのところには下記のみにとどめて、development,test,productionのそれぞれに他の値を定義してみてください、ということでした。(productionは定義済みですね) ``` default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> ```
ken1203

2020/12/08 09:47 編集

yu_1985様 ご返信ありがとうございます! ec2-user@************ Dr_tetsu$ sudo systemctl status mysql Unit mysql.service could not be found. と表示されました。 ec2-user@*************Dr_tetsu$ sudo service mysqld start Redirecting to /bin/systemctl start mysqld.service と表示されます。 はい。前回ご教示頂いたことを調べながら熟読させて頂きましたがまだ理解に苦しんでいるのが現状です。申し訳ありません。
yu_1985

2020/12/08 09:58 編集

すいません、 ``` sudo systemctl status mysqld ``` ですね。 前回の指摘内容でどうすべきかは↑に書いたので参考にしてください。
ken1203

2020/12/08 10:06 編集

yu_1985様 ご返信ありがとうございます! [ec2-user@*********** Dr_tetsu]$ sudo systemctl status mysqld ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since 金 2020-12-04 10:56:01 UTC; 3 days ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 11326 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS) Process: 11277 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 11331 (mysqld) CGroup: /system.slice/mysqld.service └─11331 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid 12月 04 10:55:56 ip-172-31-47-94.ap-northeast-1.compute.internal systemd[1]: Starting MySQL Server... 12月 04 10:56:01 ip-172-31-47-94.ap-northeast-1.compute.internal systemd[1]: Started MySQL Server. これはMy SQLが正しく起動している認識で宜しいでしょうか?? はい!ありあとうございます!参考にして書き直してみます!
yu_1985

2020/12/08 10:13 編集

mysql serverは起動しているので少なくともそこは問題ではないです。 多分database,ymlを直さないと解決しないのでまずそっちを直してください。 あと、/etc/my.cnf でsocketのパスがどうなってるかを確認してみてください。
ken1203

2020/12/08 10:16

yu_1985様 ご返信ありがとうございます! database.yml を上記を参照に書き直しました。 default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: Dr_tetsu_development username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock test: <<: *default database: Dr_tetsu_test username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock production: <<: *default database: Dr_tetsu_production username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock の認識で正しいでしょうか?? 本当に何度も質問ばかりで申し訳ありません、、、。
yu_1985

2020/12/08 10:38

正しいかどうかは自分がどうしたいかによるのですが…。 すべての環境の設定が同じなのですが、それは意図通りですか? パスワードは環境変数で各環境ごとに変えるならdefaultに書いてしまってもいいでしょう。 もとはdefaultは直書きでしたよね。 いっそのこと、すべて環境変数にしてしまってdatabase,ymlにはdefaultだけ書いて、環境変数で値をコントロールする、というのも一つの方法です。 ちなみに、エラーの内容が > Can't connect to local MySQL server through socket '/tmp/mysql.sock' だったので、元の設定だとdafaultに定義していたsocketの設定を参照してしまっていたであろうことが想像できます。
ken1203

2020/12/08 11:33 編集

yu_1985様 mysql> show global variables like 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.01 sec) mysql> exit Bye [ec2-user@********* Dr_tetsu]$ sudo vi /etc/my.cnf # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid となりました!
ken1203

2020/12/08 11:05

yu_1985様 >環境変数で値をコントロールする そんな技があるのですね!調べてみます! 先程書き直したコードでも変化はありませんでした、、、 色々とご教示頂きありがとうございます!勉強になります!
yu_1985

2020/12/08 20:10

> 先程書き直したコードでも変化はありませんでした、、、 念の為ですが、設定変更したらunicornを立ち上げ直してください。
ken1203

2020/12/09 03:55

yu_1985様 ご返信ありがとうございます! unicornを立ち上げ再度起動しましたが変化はありませんでした、、、。
yu_1985

2020/12/09 10:13

変化がないとはどういうことでしょうか。 エラーメッセージは変わりましたか?
ken1203

2020/12/09 11:21

yu_1985様 ご返信ありがとうございます! less log/unicorn.stderr.log で以下のエラー内容になります! エラー内容が変わったようには見受けられません。 https://gyazo.com/931076c73f65568690f2e17b70e1a4c1 https://gyazo.com/11f529793ba3abfc29842276107d2068 https://gyazo.com/c8289438cf6d5789bcfbb79dccc535df https://gyazo.com/121f28e21e76075d8c8efccfc33ae738 https://gyazo.com/e64dafa81411d79be8d4e0f478a93c9c https://gyazo.com/c029b49cb93be24d4550f8803eddf630 長くなってしまい申し訳ありません。
yu_1985

2020/12/09 11:47

直近で立ち上げようとしたときのログと比較してください。 lessコマンドだとログの内容すべてが確認できます。日時が出ているので、いつ時点でのログかはそこで判断してください。 当たり前ですけど、本文中に貼り付けてある時間のログはその時点のものなので改ざんしない限り変わることはありません。 新しいものは後ろにどんどん追記されます。 unicornを立ち上げる前に既存のunicornのプロセスをkillしてください。 既にunicornのプロセスが存在するのにも関わらず二重に立ち上げようとしてエラーになってるのが直近のログです。 というか、unicornのプロセスが既に立ち上がっていたのであれば、その時点ではうまく行っていたのでは?
ken1203

2020/12/10 06:32

yu_1985様 ご返信ありがとうございます! >unicornを立ち上げる前に既存のunicornのプロセスをkillしてください killを実行しましたが本番環境でWe're sorry, but something went wrong. が表示されます。再度、/log/unicorn.stderr.logを確認すると補足2のようになりました。
yu_1985

2020/12/10 06:52

killするだけじゃなくて、unicornを再度立ち上げてくださいね、と補足しておきます。 あと、ログに出ている時間帯が昨夜の時間になっていますが、これは確かに直近でunicornを立ち上げたときの内容ですか? そのエラーはアプリケーションのエラーと思われるので、もはやMySQLにつながらないところではないところの問題のような気がします。
ken1203

2020/12/12 11:23 編集

yu_1985様 ご返信ありがとうございます! >killするだけじゃなくて、unicornを再度立ち上げてくださいね、と補足しておきます。 [ec2-user@************* Dr_tetsu]$ kill 3415 [ec2-user@**************Dr_tetsu]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D [ec2-user@ip-172-31-0-206 Dr_tetsu]$ 上記を実行して本番環境で確認すると https://gyazo.com/3363ecaf4298621c0a540d493e64fa65 のようになります、、、。
yu_1985

2020/12/12 15:41

それはunicornが立ち上がった上で、アプリケーションがエラーを出してるのではないでしょうか…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問