Rails 4.1 の secret.yml とは…
よく分からない実装でござ。
config/secret.yml が存在しない( 動作させたい対象 RAILS_ENV に相当する secret_key_base が存在しない )場合
- rails s で召喚した rack server は、「Internal Server Error: secret.yml がないヨー」って言ってくる ( デーモン化せずに起動した場合、標準出力にも secret.yml が無いとエラー出力される)
- Passenger with Apache2 では「Internal Server Error: error.log になんか CGI が動かない時の正体不明のログが出力されておわり」( production.log まで到達しない)
となるんだけど、まあ Passenger の方がとにかく 500 エラーなの!ぷんすこ!って怒るのは将来のバージョンで治るんかな?Rails からのログがどう渡ってるかわかんないので、調査は未来の自分に任す。
secret.yml を作る
簡単に解決しましょ、Rails 4.1 以降なら rails new した時点でユニークな値を設定して development: と test: は作成されます。無い場合は、touch <$RAILS_ROOT>/config/secret.yml ネー。
secret_base_key ってどうやって作ればいいの?規約は?
作り方は分かるが規約はわからねえ!Rails 4.1 のリリースノートを見る限り、「ユーザが自由に値を設定する事も出来る!」と書いてあるのでそれこそ最悪 SOMEKEY とかでもいいんじゃねえの?と思ってるけど眠いので覚えてたらこれも未来の自分に任せる!
ちなみに忘れかけてたけど、値を作るだけの rake が実装されているます!
[user@localhost ~]$ bundle exec rake secret RAILS_ENV=(development|test|production)
RAILS_ENV はいらんかもしれん、叩くと毎回ユニークな値が飛び出してきそう。これを主導でコピーアンドペーストじゃ。
雑感
秘密にしたい値を Rails 側から切り離す機構は用意したから、運用の方法(各々のリポジトリでどう運用するか)はユーザに任せるよ!みたいな感じなんすかね?
Rails 4.1 未満の既存アプリケーションで似たような機構を自前で実装してたりすると、Rails のアップデートはしたいけど自前の機構を引き継ぐので secret.yml はいらん!というような場合( gem に頼ってないパトゥーン )があると思うので、やっぱ secret.yml を disable にする設定とかないのかね?Upgrading Ruby on Rails — Ruby on Rails Guides あたり呼んだら書いてあるのかな?
なんかもう疲れて眠いし、かんこれの方の金剛ちゃんも摩耶とカーニバルしてそうでわしゃ辛い。いい加減寝よう。
あ、榛名 chang のバーニングラブが可愛かったです(小並感)。
参考:
Ruby on Rails 4.1 Release Notes — Ruby on Rails Guides
Rails 4.1 リリースノート - つぶやき、メモ、写真、にゃど。
Rails 4.1.0ベータがリリースされたので主な新機能まとめ(1) - tkymtk's blog
Ruby on Rails 4.1 Release Notesを読んだ | 日々雑記