缺少`secret_token`和`secret_key_base` - 带有RVM的Rails 4.2.0

cap*_*ome 11 ruby ubuntu ruby-on-rails

最近我从Git中取出了一个我的回购.启动服务器后,我收到以下内容:缺少secret_token和secret_key_base.这可能会发生,因为我已经在我的.gitignore中包含了secrets.yml.

我目前的设置

  • Ubuntu 14.04
  • 红宝石2.2.0p0
  • rails 4.2.0
  • rvm 1.26.11
  • 本地服务器(不是远程)
  • 发展环境

许多在线资源声明我必须使用新密钥rake secret并将其添加到secrets.yml.将密钥放在secrets.yml内并重新启动rails服务器不起作用.


编辑:添加了下面的secrets.yml的内容.-04/30/15美国东部时间上午9:04

development:
    secret_key_base: LONG KEY HERE

test:
  secret_key_base: LONG KEY HERE

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)

请知道这是在我居住地(不是Heroku)的本地服务器上设置的开发环境.


其他资源状态我需要在我的内部添加一个条目,secret_token.rb但我的项目中不存在此文件.

我的应用程序运行的唯一方法是,如果我要创建一个secret_token.rb文件并在其中添加以下任一项:

MyApp::Application.config.secret_token = if Rails.env.development? or Rails.env.test?
  ('x' * 30) # meets minimum requirement of 30 chars long
else
  ENV['SECRET_TOKEN-']
end
Run Code Online (Sandbox Code Playgroud)

要么

MyApp::Application.config.secret_token = 'the secret key'
Run Code Online (Sandbox Code Playgroud)

当Rails文档声明删除它时,为什么需要此文件?

3.3 config/secrets.yml

为了运行新生成的项目,只需要来自我的Git仓库的项目,不需要secret_token.rb.

请告知我的应用程序为什么需要secret_token.rb,尽管Rails文档另有说明,否则我的应用程序将无法运行.

编辑:-04/30/15美国东部时间上午9:27

另一个奇怪的行为是我可以重命名,secrets.ymlsecret_token.rb遗留物和应用程序仍将运行.

我试图重命名secret_token.rb,添加<%= ENV["SECRET_KEY_BASE"] %>到开发中,我仍然遇到Missing secret_token问题.

编辑:在下面添加了git repo.-05/08/15美国东部时间上午2:50

git repo:https://github.com/captain-awesome/blog_mac

奇怪的是如果我要修改32个字符中的任何一个,保存secret_token.rb,重新加载服务器...我的应用程序将运行.secret_token.rb中的32个字符串是否可以自己构成?如果是这样,耙秘密的真正目的是什么?

小智 4

您是在开发环境中本地启动服务器还是在其他环境中(例如,在生产环境中的 Heroku 上)启动服务器?因为如果您在 Heroku 上运行,那么您需要secrets.yml从您的文件中删除.gitignore,以便 Heroku 可以找出密钥是什么。处理此问题的安全方法是将您的密钥存储为 Heroku 上的环境变量,并指出您的secrets.yml观点(见下文)。

secret_token.rb如果您在本地运行,只要您secret_key_base为文件中的每个环境都有设置,您就应该能够删除您的文件secrets.yml。你没有发布你的样子,但它应该看起来像这样:

development:
 secret_key_base: somerandomkey
test:
 secret_key_base: somerandomkey
staging:
 secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
production:
 secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)