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

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

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

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースの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

解決済

2回答

2297閲覧

EC2でunicornを起動する際のMySQLエラーの原因

退会済みユーザー

退会済みユーザー

総合スコア0

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースの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グッド

1クリップ

投稿2020/09/16 04:23

編集2020/09/16 06:55

#わからないこと

EC2にRailsアプリの本番環境を構築しています。
unicornの起動の際にMySQLとの接続エラーが発生するのですが、設定を見直していても原因がわかりません。

##実行したコマンド

ec2-user@ip~ $ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

##エラー

master failed to start, check stderr log for details

##ログの内容

/unicorn.stderr.logの中身 I, [2020-09-14T06:51:56.022146 #21711] INFO -- : Refreshing Gem list I, [2020-09-14T06:51:58.226567 #21711] INFO -- : listening on addr=0.0.0.0:3000 fd=9 E, [2020-09-14T06:51:58.336893 #21711] ERROR -- : Access denied for user 'ユーザー名'@'localhost' (using password: YES) (Mysql2::Error::ConnectionError) ・ ・ ・

##ps -aef | grep mysqlの結果

ec2-user 6564 6489 0 03:31 pts/1 00:00:00 grep --color=auto mysql mysql 28647 1 0 9月14 ? 00:05:16 /usr/sbin/mysqld

##databese.yml

default: &default adapter: sqlite3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 development: adapter: mysql2 encording: utf8 database: アプリ名_development pool: 5 username: ユーザー名 password: パスワード(ローカルで設定したもの) host: localhost # 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: adapter: mysql2 encoding: utf8 reconnect: false database: アプリ名_test pool: 5 username: ユーザー名 password: パスワード(ローカルで設定したもの) host: localhost production: <<: *default database: <%= Rails.application.credentials.db[:database] %> username: <%= Rails.application.credentials.db[:username] %> password: <%= Rails.application.credentials.db[:password] %> socket: <%= Rails.application.credentials.db[:socket]%>

##credentials.yml

db: database: アプリ名 username: root password: パスワード(インスタンス上で設定したもの) socket: /var/lib/mysql/mysql.sock

master.keyを設定し直したりもしましたが、他にどんな設定を見直したらいいのかわかりません。

確認すべきファイルだけでもご教授いただけますと幸いです。
どうかよろしくお願いいたします。


作業環境

  • macOS Catalina
  • Amazon Linux2
  • EC2
  • MySQL
  • Ruby on Rails6

###追記
yu_1985様の御指摘をいただき、database.ymlを書き換えました。

default: &default adapter: mysql2 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 encording: utf8 database: アプリ名 pool: 5 username: root password: パスワード host: localhost

この状態で起動を試みると、ログでこのようなエラーが確認できました。
master failed to start, check stderr log for detailsが出ることには変化なし)

I, [2020-09-16T06:46:26.296957 #8946] INFO -- : Refreshing Gem list bundler: failed to load command: unicorn_rails (/home/ec2-user/.rbenv/versions/2.6.6/bin/unicorn_rails) NoMethodError: Cannot load database configuration: undefined method `[]' for nil:NilClass ・ ・ ・

現在このエラーについて調べています。

もしこのエラーについてお分かりでしたら、何卒ご教授ください。

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

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

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

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

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

yu_1985

2020/09/16 05:48

先の同様の質問へ書いたとおりですが、そもそもUnicorn以前にMySQLクライアントで、Railsで使っているユーザを使っての接続は確認はできているんでしょうか?
yu_1985

2020/09/16 05:55

よくよく読むと(おそらく)rootにはパスワードが設定してあると思われますが、productionでは環境変数で接続情報を設定してますね。 その環境変数はちゃんと設定していますか? また、環境変数は設定済みなのであれば、そこで使っているユーザではMySQLへの接続は確認できてますか? あと、設定にユーザ情報をベタ書きするのはやめて、全て環境変数にしたほうが良いです。 仮にこのソースをgitでコミットしてしまうと接続情報がgitに記録されてしまいます。
退会済みユーザー

退会済みユーザー

2020/09/16 05:55

重ね重ね恐れ入ります。 mysql -u root -p で接続できるということは、その確認はできているということでよろしいのでしょうか?
yu_1985

2020/09/16 05:58

少なくともrootでは接続が確認できているということはわかりました。 しかし上述の通りproductionでは環境変数で接続情報を設定しているのですが、環境変数にもrootユーザを設定していますか? (接続情報はすべて環境変数にして接続情報をベタ書きするのは避けるべきというのと、rootユーザを使うのもまず避けたほうがいいとは思いますが)
退会済みユーザー

退会済みユーザー

2020/09/16 05:59

env | grep SECRET_KEY_BASE(secret_key_baseが出る) env | grep DATABASE_PASSWORD(MySQLのrootユーザのパスワードが出る) ▲いずれの結果も問題ないと思います。
yu_1985

2020/09/16 06:04

DBへの接続に使っている情報はそれだけではないので、パスワードだけ抜粋しないでそれら全てに問題がないか確認してください。 あとは、「Railsが環境変数をちゃんと読み込んでいるか」も確認しましょう。 MySQLのAccess DeniedなのでSECRET_KEY_BASEは関係ないと思います。
退会済みユーザー

退会済みユーザー

2020/09/16 06:07

わかりました。調べてみます。 それにあたってなのですが、DBへの接続に使っている他の情報がよくわかりません。確認するディレクトリやファイルを教えていただけませんか?
yu_1985

2020/09/16 06:15

更によくよく見たら環境変数でもなかったですね。すいません。 何となく理由がわかったので回答に書きます。 ``` database: <%= Rails.application.credentials.db[:database] %> username: <%= Rails.application.credentials.db[:username] %> password: <%= Rails.application.credentials.db[:password] %> socket: <%= Rails.application.credentials.db[:socket]%> ```
guest

回答2

0

質問のところに色々書きましたが、接続設定のところを見ていたら何となくわかりました。

-E productionで起動しようとしているのでproductionのところの設定を読んでDBに接続しようとしています。

productionの設定は
defaultに加えてcredential.dbの4つの情報を使用するように書いています。

production: <<: *default database: <%= Rails.application.credentials.db[:database] %> username: <%= Rails.application.credentials.db[:username] %> password: <%= Rails.application.credentials.db[:password] %> socket: <%= Rails.application.credentials.db[:socket]%>

一方default

default: &default adapter: sqlite3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000

なので、adapterがsqlite3のままです。
productionも他の環境と同様にadapterをmysql2にする必要があるかと思います。
他の環境では指定しているencodingやhostもちゃんと設定に入れるべきかなとも。

投稿2020/09/16 06:22

yu_1985

総合スコア7588

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

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

0

ベストアンサー

環境構築を最初からやり直しました。
ご回答ありがとうございます。

投稿2020/09/19 07:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問