Help us understand the problem. What is going on with this article?

EC2でMYSQLに問題があるようでサーバーが起動しない

More than 3 years have passed since last update.

unicornでサーバー起動しても立ち上がらない

以下のコマンドでサーバー起動を試みる。

unicorn_rails -c config/unicorn.rb -E production

config/unicorn.rbではunicornについての設定ファイルを指定、-E productionで環境を指定している。

サーバーが起動せずプロセスも即終了してしまう。なぜだ。

エラーログを確認してみる

less log/unicorn.stderr.logでエラーを確認する。

I, [2017-02-15T16:36:15.916766 #18260]  INFO -- : Refreshing Gem list
I, [2017-02-15T16:36:17.465988 #18260]  INFO -- : listening on addr=0.0.0.0:3000 fd=10
E, [2017-02-15T16:36:17.467622 #18260] ERROR -- : Access denied for user 'root'@'localhost' (using password: NO) (Mysql2::Error)

ふむふむ。なにやらrootユーザーでアクセスを試みて失敗している模様。
using password: NOという部分が気になる。環境変数で設定したパスワードが読み込まれていない?

Access denied for user 'root'@'localhost' (using password: NO)

適当なパスワードでmysqlにログイン

試しに適当なパスワードでログインを試みると、間違ったパスワードなので弾かれるが、using password: YESの記述が。

unicornでサーバーを起動する際はNOだったので、やはりこれは「パスワードが存在しない」とされているようだ。

[ec2-user@ip-xxx-xx-xx-xx pairs-like]$ mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[ec2-user@ip-xxx-xx-xx-xx pairs-like]$

環境変数を変えて再度試みる

envで環境変数を表示しようとしてもDATABASEの環境変数とパスが表示されない。試しにsudo envを打つと表示される。env | grep DATABASE_hogehogeだと表示される。謎い。

という事でTEST_DATABASEにしてみたらenvでもちゃんと表示された。railsのdatabase.ymlで読み込む変数もこれに変更して再度サーバーを起動してみる。

念のためmysqlサーバーを再起動

[ec2-user@ip-xxx-xx-xx-xx pairs-like]$ sudo service mysqld start
Starting mysqld:                                           [  OK  ]

しかし結果は変わらず...。

I, [2017-02-15T16:52:01.405933 #18452]  INFO -- : Refreshing Gem list
I, [2017-02-15T16:52:04.180356 #18452]  INFO -- : listening on addr=0.0.0.0:3000 fd=10
E, [2017-02-15T16:52:04.183666 #18452] ERROR -- : Access denied for user 'root'@'localhost' (using password: NO) (Mysql2::Error)

環境変数が使えてないのではないか....

mysqlのpasswordを変えてみろとか書いている記事がいくつかあったのですが、それは面倒だしmysql -u root -pでログインは出来るので、そこじゃない。

そもそもdatabase.yml内で環境変数が読み込めていないのではないか(記述がまちがっているとかで)。

ちなみに現在は <%= ENV['hogehoge'] %>のように読み込んでいる。これを一時的にパスワードをベタで書いてみるとどうか。

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

動いた...!

環境変数が正しく展開できていなかったのでは?

[rails]production環境のdatabase.ymlでハマったこと(環境変数設定)

こんな記事が書かれていまして、ジェネレーターで生成したパスワードに$が含まれるなどして環境変数が正しく展開されない時があるとのこと。

確認してみたが、そう言った事は特にない模様。

結局、再度環境変数をdatabase.ymlに設定したら動いた

なんとも虚しい結果ですが、再度環境変数を設定してdatabase.ymlの記述を変更したら動きました。
意味不明です。envをしても表示されるようになりました。

世の中には不思議な事が沢山ありますね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした