質問: Rails + Nginx + UnicornでAmazon Linux上にプロダクション環境を構築しようとしています。 それぞれ設定を行いブラウザからサーバにアクセスしても何も表示されません。 `unicorn.stderr.log`を確認してみたところ、下記のように`secret_key_base`が設定されていないとエラーが出ていました。 ``` E, [2016-02-26T11:48:42.067474 #11474] ERROR -- : app error: Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml` (RuntimeError) E, [2016-02-26T11:48:42.067574 #11474] ERROR -- : /home/ec2-user/rails_test/vendor/bundle/ruby/2.2.0/gems/railties-4.2.3/lib/rails/application.rb:534:in `validate_secret_key_config!' E, [2016-02-26T11:48:42.067602 #11474] ERROR -- : /home/ec2-user/rails_test/vendor/bundle/ruby/2.2.0/gems/railties-4.2.3/lib/rails/application.rb:246:in `env_config' 後略・・・ ``` しかし、SECRET_KEY_BASEはコマンドライン上で次のようにして設定しています。 `SECRET_KEY_BASE=長いランダムな文字列` `export SECRET_KEY_BASE` `printenv`で環境変数が設定されていることも確認できています。 また、`bundle exec rails s -b 0.0.0.0 -e production`での起動時はエラーが発生したURLに問題なくアクセスできています。 productionのsecret_key_baseは下記のようにデフォルト通りのままです。 ``` production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> ``` UnicornとNginxは次のように起動しています。 Unicornはコマンド`sudo bundle exec unicorn -c config/unicorn.rb -E production -D`で起動し Nginxは`sudo service nginx start`で起動しています。 どちらもプロセスの起動は確認できています。 環境 Amazon Linux Rails 4.2.3 Unicorn 5.0.1 Nginx 1.9.11 追記 production用のsecret_key_baseを`config/secrets.yml`に直接入力しましたら無事にアクセスできました。Unicorn側の問題のようです。 secret_key_baseを`config/secrets.yml`に入力しなくても大丈夫な方法ご存知でしたらご教授お願いします。
回答: uincorn側で環境変数を正常に認識できていない模様ですが、過去に自分が同様のケースでハマった時は以下の様なケースでした。 * 環境変数を定義しているlinux userとunicornを起動しているlinux userが異なっていた * railsで使う環境変数がログイン時にロードされない場所で定義されていた 直接環境変数を定義すると上記のようにlinuxの設定に依存してしまうので、私は環境変数を使うときはdotenvを使って、`.env`ファイルにrailsで使う環境変数を定義しておき、capistranoでデプロイする度にロードさせるようにしています。ご参考まで。