您的位置:首页 > 大数据 > 人工智能

rails production secret_key的设置

2016-07-26 15:51 483 查看
问题: app error: Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml`

rails的安全机制需要一个秘钥。在rails 4.x版本的时候, 秘钥的设置在 RAILS_ROOT/config/secrets.yml, 这文件一般形如:

development:
secret_key_base: xxxxxx

test:
secret_key_base: xxxxxx

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:

secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

在非生产环境下, 秘钥都是'明文', '硬编码', 写在secrets.yml 里面的。这种方式会由于源代码的泄露, 造成安全问题, 所以这种方式存在安全隐患。

所以rails要求在生产环境下, 通过操作系统的环境变量来设置秘钥, 这样相对比较稳妥。

这里可以采取2种方法:

  1. 自己动手, 利用linux系统的机制来设置环境变量 SECRET_KEY_BASE = XXX

  2. 使用GEM dotenv-deployment帮你设置, 具体机制和方法1本质没区别。

  ps: rails产生秘钥的指令: rake secret RAILS_ENV=production, 会产生一个秘钥(好尼玛长)

这里我选择方法2, 利用/etc/profile.d/ 下面添加脚本的方式来设置秘钥:

  rake secret RAILS_ENV=production 产生一个秘钥

在目录 /etc/profile.d/xxx.sh, 下面新建一个
st_rails_secret_key_env.sh
脚本, 内容:
export SECRET_KEY_BASE='你前面产生的那个秘钥'


  然后刷新你的shell, echo $SECRET_KEY_BASE, 输出成功

extra:

  linux下面设置环境变量的方法:

  1. 两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/profile.d/设置所有用户生效

  2. /etc/profile.d/比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d/下对应的shell脚本即可,不用像/etc/profile需要改动此文件

  

参考链接:

  http://stackoverflow.com/questions/23726110/missing-production-secret-key-base-in-rails
http://snakelab.cc/2014/11/08/ror-production.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: