ruby-on-rails 返回nil的Rails凭据

tsm1rwdh  于 2023-03-20  发布在  Ruby
关注(0)|答案(7)|浏览(166)

我有一个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,我会得到正确的结果,所以文件可以很好地读取。

bogh5gae

bogh5gae1#

我也遇到了同样的问题。对我来说,我重新启动Rails服务器修复了这个问题。
服务器可能不会自动接受更改,或者每当您创建新的credits.yml.enc文件时,服务器都需要重新启动。

yshpjwxd

yshpjwxd2#

您是否尝试过使用dig
https://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig
类似这样的方法可能有效:

Rails.application.credentials.dig(:aws, :access_key_id)
8cdiaqws

8cdiaqws3#

我也遇到了同样的问题。我用sublime更新了凭证文件。即使在重新启动服务器时我也无法进行更改。我关闭了终端,然后它开始反映更改。

hk8txs48

hk8txs484#

我发现Rails.application.credentials.dig(:aws,:access_key_id)不起作用,但是,如果您删除“:aws "并使用Rails.application.credentials.dig(:access_key_id),它将提取名为”access_key_id:“的机密文件中的项的值。

ikfrs5lh

ikfrs5lh5#

我自己也遇到过这种情况,我访问数据的方法是创建一个helper方法,如下所示:

def credentials
    Rails.application.credentials[:aws]&.with_indifferent_access
  end

然后使用credentials[:access_key_id]我能够访问内部密钥。如果我尝试从我所在的控制器中执行Rails.application.credentials[:aws],它不起作用,但如果我使用helper方法,它起作用了。🤷🏻‍️
也许这会对某人有帮助,也可能这只是我的运气。我的头撞在上面大约4个小时。

avwztpqn

avwztpqn6#

我也遇到过类似的问题,不过我不确定是否与您的问题相同。如果您的access_key中包含保留字符,它将无法正确解析。即使是像“!"这样的字符,也会导致问题。在credentials.yml.enc文件中,将值括在引号中。当您访问这些值时,使用dump方法来转义有问题的字符。因此,在您的情况下,Rails.application.credentials[:aws][:access_key_id].dump

mftmpeh8

mftmpeh87#

我真的不知道这是什么黑客,但在第一,我运行这个命令

EDITOR='gedit' rails credentials:edit

这将创建master.key和credentials.yml.enc文件。在credentials.yml.enc文件中添加一些值后,我无法通过

Rails.application.credentials.dig(:test_var)

所以我对前一个命令做了一点修改

EDITOR='gedit' rails credentials:edit --environment development

上面的命令将在config/credentials/文件夹中创建development.key和development.yml.env。现在**Rails.application.credentials.dig(:test_var)**能够获得test_var键的值,尽管我已经删除了整个config/credentials/文件夹。
我真的不知道这里是什么黑客,但这是解决我的问题的整个场景。

相关问题