gpt4 book ai didi

ruby-on-rails - Rails 生产中缺少 secret_key_base

转载 作者:行者123 更新时间:2023-12-02 01:37:55 25 4
gpt4 key购买 nike

我不明白为什么找不到我的 secret_key_base。当我在生产中启动我的应用程序时,我在 Web 浏览器上收到此消息: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"] %> 时使用生成的 key 它可以工作,否则,不推荐...

所以我把我的 key 放在/etc/profile & ~/.bashrc & ~/.rvm/environment/ruby-2.1.5如下:

export SECRET_KEY_BASE=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

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 来尝试,它成功了!

关于ruby-on-rails - Rails 生产中缺少 secret_key_base,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30000303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com