所以在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
)之后。
如何解决此错误?
答案 0 :(得分:1)
似乎您登录的用户与您用于添加密钥库的用户不同。您以root身份登录但我不认为您正在使用root
部署或启动服务器,对吧?
如果您使用名为deploy
的用户进行部署,那么您应该以{{1}}身份登录并将env var添加到deploy的上下文(例如deploy
)。我不是100%确定~/.bashrc
会在这里工作。另外,请记住在添加var
答案 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。
这种系统在设计时考虑了安全性。对你目前的情况可能有点过分,但我认为值得一提。
祝你好运,希望这篇文章有所帮助!