Rails

secret_key_baseあたりのメモ

More than 3 years have passed since last update.

ちょっと前までは
- 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

参考