ちょっと前までは
- config/initializers/secret_token.rb
config/initializers/secret_token.rb
## デフォルト
アプリ名::Application.config.secret_key_base = 'すごい長い文字列'
## 一方、Tutorialでは動的にしようってやつだった
## Tutorial 4.0 の "リスト 3.2 秘密トークンを動的に生成する。"
def secure_token
…
end
アプリ名::Application.config.secret_key_base = secure_token
- Tutorialでは
.secret
がなかったら、新しく用意されて、あったら読み込まれる - Tutorialでは
.secret
は.gitignoreにある
Rails 4.1からは
- config/secrets.yml
config/secrets.yml
development:
secret_key_base: hogehoge… <- 長い文字列
test:
secret_key_base: fugafuga… <- 長い文字列
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
- 環境変数"SECRET_KEY_BASE"に書こうよってなってる
- Railsで使用したいAPIkeyとかもここに書けば良いっぽい
- keyを直接書くなら
config/secrets.yml
を.gitignoreに入れないとあかん
使い方
config/secrets.yml
…
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
hoge_hoge: hogehoge_production
-
Rails.application.secrets.hoge_hoge
で呼ぶ - Viewでは使えなかった
- Helper, Controllerでは使えた
これからRails 4で新しく作るとき(.gitignoreに入れたくない...)
- 全部環境変数でやる
$ irb
irb(main):001:0> require 'securerandom'
=> true
irb(main):002:0> SecureRandom.hex(64)
=> "長い文字列"
追記(他にも方法を教えてもらいました!!ありがとうございます)
$ rake secret
=> "長い文字列"
これを環境変数SECRET_KEY_BASEにコピペする
移行したい時
Rails 4.0.4 => Rails 4.1.0アップデート in qiita
を参考に
-
development
,test
のとこには適当な文字列を突っ込む -
production
のとこは<%= ENV["SECRET_KEY_BASE"] %>
でやる - .bashrcや.zshrc等に環境変数として
export SECRET_KEY_BASE="xxxx"
的なことをする - sourceコマンドで再読み込み
-
rm config/initializers/secret_token.rb
でおしまい?
移行したい時(Tutorialみたく.secretでやってる人)
- .secretに"xxxx"が書いてあるので上と同じようにする
.secretとか使ってやりたい時
メソッドは引き継いで、下記のようにしたらいいなじゃないかと(試していない)
#変更前
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
#変更後
production:
secret_key_base: secure_token