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
をしても表示されるようになりました。
世の中には不思議な事が沢山ありますね。