我有一个Rails 6.0.0rc2应用程序,但在阅读凭据时遇到问题。
当我执行rails credentials:edit
时,我可以添加凭据,它们保存得很好。
aws:
access_key_id: 123
secret_access_key: 345
但是,当我运行控制台并尝试阅读凭据时,我得到了以下信息:
Rails.application.credentials[:aws]
=> nil
或
Rails.application.credentials.aws[:access_key_id]
Traceback (most recent call last):
1: from (irb):2
NoMethodError (undefined method `[]' for nil:NilClass)
或
Rails.application.credentials[:aws][:access_key_id]
Traceback (most recent call last):
1: from (irb):3
NoMethodError (undefined method `[]' for nil:NilClass)
无论我尝试什么,我的凭据似乎总是nil
。
如果我运行Rails.application.credentials.secret_key_base
,我会得到正确的结果,所以文件可以很好地读取。
7条答案
按热度按时间bogh5gae1#
我也遇到了同样的问题。对我来说,我重新启动Rails服务器修复了这个问题。
服务器可能不会自动接受更改,或者每当您创建新的credits.yml.enc文件时,服务器都需要重新启动。
yshpjwxd2#
您是否尝试过使用
dig
?https://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig
类似这样的方法可能有效:
8cdiaqws3#
我也遇到了同样的问题。我用sublime更新了凭证文件。即使在重新启动服务器时我也无法进行更改。我关闭了终端,然后它开始反映更改。
hk8txs484#
我发现Rails.application.credentials.dig(:aws,:access_key_id)不起作用,但是,如果您删除“:aws "并使用Rails.application.credentials.dig(:access_key_id),它将提取名为”access_key_id:“的机密文件中的项的值。
ikfrs5lh5#
我自己也遇到过这种情况,我访问数据的方法是创建一个helper方法,如下所示:
然后使用
credentials[:access_key_id]
我能够访问内部密钥。如果我尝试从我所在的控制器中执行Rails.application.credentials[:aws]
,它不起作用,但如果我使用helper方法,它起作用了。🤷🏻️也许这会对某人有帮助,也可能这只是我的运气。我的头撞在上面大约4个小时。
avwztpqn6#
我也遇到过类似的问题,不过我不确定是否与您的问题相同。如果您的access_key中包含保留字符,它将无法正确解析。即使是像“!"这样的字符,也会导致问题。在credentials.yml.enc文件中,将值括在引号中。当您访问这些值时,使用dump方法来转义有问题的字符。因此,在您的情况下,
Rails.application.credentials[:aws][:access_key_id].dump
mftmpeh87#
我真的不知道这是什么黑客,但在第一,我运行这个命令
这将创建master.key和credentials.yml.enc文件。在credentials.yml.enc文件中添加一些值后,我无法通过
所以我对前一个命令做了一点修改
上面的命令将在config/credentials/文件夹中创建development.key和development.yml.env。现在**Rails.application.credentials.dig(:test_var)**能够获得test_var键的值,尽管我已经删除了整个config/credentials/文件夹。
我真的不知道这里是什么黑客,但这是解决我的问题的整个场景。