問題描述
在開發與部署 Rails 專案的時候,我們會需要存放一些敏感的資訊,例如 API key、secret key 等等,這些資訊可以被加密存放到 config/credentials.yml.enc 檔案中。
而這些加密的資訊需要一個 master.key 來進行解密,而這個 master.key 通常會存放在 config/master.key 檔案中。以下是關於 master.key 的相關操作。
解決方法
- 執行
rails credentials:edit會同時檢查config/master.key是否存在,如果不存在,則會提示你建立一個新的master.key。並且會開啟credentials.yml.enc檔案讓你進行編輯。1
2
3
4$ EDITOR="code --wait" rails credentials:edit # 使用 VSCode 編輯 credentials.yml.enc
$ EDITOR="vi" rails credentials:edit # 使用 vi 編輯 credentials.yml.enc
$ EDITOR="nano" rails credentials:edit # 使用 nano 編輯 credentials.yml.enc
# ...以此類推,可以指定其他編輯器 credentials.yml.enc的內容如下,預設會看到secret_key_base這個 key,還有其他加密後的資訊。1
secret_key_base: ggg4ded928834c777106xxxe2453739d22cf4b2046d161da8575e0dbbulahbulah
- 如果需要產生新的
master.key,可以執行rails credentials:setup,這樣會同時產生config/master.key檔案,以及credentials.yml.enc檔案。1
$ rails credentials:setup
master.key記得要加入到 gitignore 中,避免被 commit 到遠端倉庫中。並且不要隨意分享給其他人。- 如果需要更換
master.key,可以執行rails credentials:regenerate,這樣會重新產生credentials.yml.enc檔案,並且不會改變master.key。1
$ rails credentials:regenerate
- 如果需要查看
credentials.yml.enc檔案的內容,可以執行rails credentials:show。1
$ rails credentials:show