在Rails生产中缺少secret_key_base

斯特凡

我不明白为什么找不到我的secret_key_base。在生产环境中启动我的应用程序时,我在网络浏览器上收到以下消息:Missing 'secret_key_base' for 'production' environment, set this value in 'config/secrets.yml'

我的config/secret.yml样子是这样的:

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

当我用<%= ENV["SECRET_KEY_BASE"] %>生成的密钥替换它时,它将起作用,否则,不建议使用...

所以我把我的钥匙/etc/profile~/.bashrc~/.rvm/environment/ruby-2.1.5如下:

export SECRET_KEY_BASE=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

在生产模式下启动Rails控制台时,我可以看到我的钥匙:

rails c production
Loading production environment (Rails 4.1.6)
2.1.5 :001 > ENV["SECRET_KEY_BASE"]
 => "XXXXXXXXXXXXXXXXXXXXX"

我不知道为什么所有这些都不起作用。我是否缺少明显的东西?


完整的错误日志:

ERROR RuntimeError: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`
        /home/xxx/.rvm/gems/ruby-2.1.5/gems/railties-4.1.6/lib/rails/application.rb:462:in `validate_secret_key_config!'
        /home/xxx/.rvm/gems/ruby-2.1.5/gems/railties-4.1.6/lib/rails/application.rb:195:in `env_config'
        /home/xxx/.rvm/gems/ruby-2.1.5/gems/railties-4.1.6/lib/rails/engine.rb:510:in `call'
        /home/xxx/.rvm/gems/ruby-2.1.5/gems/railties-4.1.6/lib/rails/application.rb:144:in `call'
        /home/xxx/.rvm/gems/ruby-2.1.5/gems/rack-1.5.2/lib/rack/lock.rb:17:in `call'
        /home/xxx/.rvm/gems/ruby-2.1.5/gems/rack-1.5.2/lib/rack/content_length.rb:14:in `call'
        /home/xxx/.rvm/gems/ruby-2.1.5/gems/rack-1.5.2/lib/rack/handler/webrick.rb:60:in `service'
        /home/xxx/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
        /home/xxx/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run'
        /home/xxx/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'

编辑1:

我看了一下,~/.rvm/gems/ruby-2.1.5/gems/railties-4.1.6/lib/rails/application.rb并使用进行了一些调试跟踪puts看起来我的ENV变量nil在此文件中也适用于Ruby,而且在config/secret.yml解析文件时也适用。

这是我在解析过程中放入文件的日志:

secrets = ActiveSupport::OrderedOptions.new
yaml = config.paths["config/secrets"].first
if File.exist?(yaml)
  puts "FILE EXIST !"
  puts ENV["SECRET_KEY_BASE"]
  require "erb"
  all_secrets = YAML.load(ERB.new(IO.read(yaml)).result) || {}
  puts all_secrets.inspect
  env_secrets = all_secrets[Rails.env]
  puts env_secrets.inspect
  secrets.merge!(env_secrets.symbolize_keys) if env_secrets
  puts secrets.inspect
end

这是当我使用rvmsudo rails s -e“ production” -p 80启动服务器时的结果

FILE EXIST !
                <-------------- (nil)
{"development"=>{"secret_key_base"=>"OK"}, "test"=>{"secret_key_base"=>"OK"}, "production"=>{"secret_key_base"=>nil}}
{"secret_key_base"=>nil}
{:secret_key_base=>nil}

看起来rvmsudo没有传递env变量,我来看一下...

斯特凡

我对EDIT#1的假设是正确的。问题是rvmsudo在某些条件下传递环境变量,这些条件可以在grep此处命令中找到:

https://github.com/rvm/rvm/blob/dff3eeac883ce6314c021f3d00730bcd5a628e3e/binscripts/rvmsudo#L46

因此,我将环境变量名称更改为:http_SECRET_KEY_BASE尝试并成功了!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在生产中无法识别rails secret_key_base

Rails中缺少生产secret_key_base

Rails.application.credentials.dig(:secret_key_base) 在 Heroku 生产中返回 nil

Rails:如何解决“在“生产”环境中缺少secret_key_base”的问题

如何解决错误“在“生产”环境中缺少“ secret_key_base””(Rails 4.1)

Heroku上的“缺少'生产环境'的secret_key_base`”错误

在Ubuntu 18.04服务器(Rails 6.0)上缺少“生产”环境的“ secret_key_base”,尝试了多个主题

测试环境中Rails.application.secrets中缺少secret_key_base

无法在Heroku上运行的Ruby on Rails 4.1.4应用程序中为生产环境设置secret_key_base

rails:泄露secret_key_base有什么后果

在Rails 5.2中单独使用secret_key_base吗?

Rails 4中secret_key_base的用途是什么

Rails 5.2凭证:编辑不喜欢secret_key_base

Rails 6.0 中的 secret_key_base 最佳实践

在Rails 4.2.2中开发和测试secret_key_base

生产环境缺少secret_key_base-在Heroku上托管Rails 4.1.4应用

Secret_key_base无法正常工作?

我可以在没有Ruby的情况下生成Rails SECRET_KEY_BASE吗?

在Rails 6上定义secret_key_base的正确方法是什么?

部署到 Heroku 的问题:缺少“secret_key_base”和未初始化的常量帖子(NameError)

如何在AWS上生成丢失的secret_key_base

发生未处理的低级错误。“生产”环境缺少“secret_key _base”

在“开发”环境中缺少“ secret_token”和“ secret_key_base”,请在“ config / secrets.yml”中设置这些值。

在“开发”环境中缺少“ secret_token”和“ secret_key_base”,请在“ config / secrets.yml”中设置这些值

Rails text_field_tag,生产中缺少输入类型

升级生产中的Rails

Rails:生产中缺少资产(没有路线匹配[GET]“ /assets/application-12345.css”)

生产中缺少角形材料的样式/动画

Vue项目在生产中缺少样式