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


参考