zoukankan      html  css  js  c++  java
  • rails production secret_key的设置

    问题: 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

        

  • 相关阅读:
    Redis集群(一)
    Mysql分库分表
    Redisson分布式锁
    Spring Cloud Eureka 高可用
    Spring RestTemplate具备负载均衡功能
    Redis分布式锁
    B树/B-树/B+树/B*树的数据库应用
    ABAC访问控制模型
    Maven自定义打包的包名
    Versions maven plugin 修改版本
  • 原文地址:https://www.cnblogs.com/mahong-shaojiu-ruby/p/5707771.html
Copyright © 2011-2022 走看看