2014-09-06 49 views
1

我正在部署Rails应用程序。
当我在secretts.yml文件中拥有secret_key_base:<%= ENV["SECRET_KEY_BASE"] %>时,我在nginx日志文件中得到错误:secret_key_base。
我已经生成在控制台中使用rake secret秘密,并放置在〜/ .bashrc中
出口SECRET_KEY_BASE="secret" 从我跑echo $SECRET_KEY_BASE和复制的秘密secrets.yml与秘密更换<%= ENV["SECRET_KEY_BASE"] %>控制台。
然后,一切正常,应用程序在生产环境中运行良好。
我不想在secret.yml中保密,我不知道如何纠正这个或我做错了什么。
有没有人有任何建议?secrets.yml环境变量不能在Rails中工作4.1.4

回答

-1

你可以把这个秘密基地/config/initializes/secret_token.rb:

SampleApp::Application.config.secret_key_base = 'Your_Base_here' 

编辑: 这是一种劝阻在许多情况下,这样编辑.ENV文件,并设置您的主要基地:

SECRET_KEY_BASE=Your_base_here 

,并把你的secrets.yml回:

<%= ENV["SECRET_KEY_BASE"] %> 

你可能会改变原生使用/config/initializes/secret_token.rb:

SampleApp::Application.config.secret_token = ENV['SECRET_TOKEN'] 

这会给你相同的结果,更安全。 如果您然后在推动这Heroku的规划:

heroku config:set SECRET_KEY_BASE=$SECRET_KEY_BASE 
0

在生产中的〜/ .bashrc可能读不出来 - 比如,你运行作为不同的用户,nginx的可能不是在开始之前读的〜/ .bashrc,等Lots of people遇到这个问题。

一个常见的方法是处理像Rails处理数据库配置的环境配置。创建一个配置/ 东西 .yml文件与设置为每个环境,然后阅读yaml在配置/初始化/ 东西 .rb初始值设定项,并使用特定环境的值。 rails_configfigaro宝石自动化这种方法。我经常只是没有宝石就做到了,因为它不是非常困难。和database.yml一样,关键在于你永远不想检查这个到源代码控制 - 在git中使用.gitignore。

如果你想坚持使用环境变量来设置你的密钥库,那么你怎么做取决于你的生产机器,以及如何配置它并部署你的代码。使用Heroku,只需弹出Heroku控制台并进行设置即可。对于其他情况,您可以使用Chef/Puppet/Ansible等设置服务器的环境变量。另一种方法是使用Capistrano推送该信息。