缺少'secret_key_base`用于'生产'环境,在Ubuntu Server上的config / secrets.yml中设置此值

时间:2018-05-30 11:34:11

标签: ruby-on-rails digital-ocean ubuntu-server rvm-capistrano

所以在Ubuntu服务器上我得到了我的日志:

#<RuntimeError: Missing `secret_key_base` for 'production' 
       environment, set this value in `config/secrets.yml`>
      /home/deploy/apps/project/shared/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/application.rb:510:in `validate_secret_key_config!'
      /home/deploy/apps/project/shared/bundle/ruby/2.4.0/gems/railties-5.1.4/lib/rails/application.rb:247:in `env_config'```

我的浏览器:

An unhandled lowlevel error occurred. The application logs may have details.

My secrets.yml(在deploy / apps / project / current / config&amp; deploy / apps / project / shared / config中):

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

deploy.rb

...
namespace :deploy do
    desc 'Rails Secrets'
    task :secret do
      on roles(:app) do
        execute "export SECRET_KEY_BASE=`bundle exec rake secret`"
      end
    end
    before :finishing,  :secret
    ...
end

我还尝试在SECRET_KEY_BASE中手动添加/etc/profile。当我输入此命令时出现:printenv(因为我手动添加了它),但当退出root时,printenv中不再存在它。

printenv命令中不存在ENV变量。在我执行部署(cap production deploy:initial)之后。

如何解决此错误?

2 个答案:

答案 0 :(得分:1)

似乎您登录的用户与您用于添加密钥库的用户不同。您以root身份登录但我不认为您正在使用root部署或启动服务器,对吧?

如果您使用名为deploy的用户进行部署,那么您应该以{{1​​}}身份登录并将env var添加到deploy的上下文(例如deploy)。我不是100%确定~/.bashrc会在这里工作。另外,请记住在添加var

后重新启动rails服务器

答案 1 :(得分:1)

  

如何解决此错误?

我注意到的第一件事是

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

我怀疑您不需要ERB模板调用。

secret_key_base: ENV["SECRET_KEY_BASE"]
  

printenv命令中不存在ENV变量。我执行部署后

其次,我想知道你的链中是否分叉了一个新shell。如果是这样,那么shell设置变量将不可用,因为新的分叉shell自然没有它。因此,唯一的方法是通过设置例如。 $HOME/.profile或您的贝壳profile

第三,我会选择使用某种辅助宝石来处理这个问题。有一些例如。 Figaro这是一篇简单的文章,向您展示how to use it

  

我还尝试在/ etc / profile

中手动添加SECRET_KEY_BASE

/etc/profile添加内容是一个坏主意。它用于在用户shell上设置系统范围的环境变量。你想要的可能是$HOME/.profile

  

退出根目录时

我强烈建议不要在root下运行,因为它会破坏整个GNU / Linux安全设置。如果您必须伪装成root,请使用带有例如的香草用户帐户。 fakeroot

  

执行“export SECRET_KEY_BASE = bundle exec rake secret

以这种方式处理秘密有点笨拙,不太安全也不方便。 可以说金标准目前是Hashicorp's Vault,它也有一个很好的Rails adapter

这种系统在设计时考虑了安全性。对你目前的情况可能有点过分,但我认为值得一提。

祝你好运,希望这篇文章有所帮助!