我想从Rails应用程序和主机旁边的其他地方获取秘密信息。我在config/initializers
下创建了一个全局变量文件来获取密钥。然后在数据库连接文件中设置它们。像这样:
config / initializers / get_secrets.rb
@@username = 'A'
@@password = 'B'
config / database.yml
development:
adapter: mysql2
encoding: utf8
database: my_db_name
username: <%= @@username %>
password: <%= @@password %>
host: 127.0.0.1
port: 3306
运行rails console
时得到:
./config/initializers/get_secrets.rb:1: warning: class variable access from toplevel
(erb):10: warning: class variable access from toplevel
>
在这种情况下,这似乎不是很好的用法。那有正确的方法吗?
答案 0 :(得分:1)
在Rails 5.2 + 中,我们有一个master.key文件和一个凭据YAML文件。 master.key文件会加密您的凭据(因此,除了您的服务器外,不要向任何人显示此密钥)。
您可以通过执行以下操作来激活它:
EDITOR=vim rails credentials:edit
文件:
aws:
key: 123
google_key: 456
secret_key_base: f230ffddd1d1f151j3bchjas9a292j221...
如果您要使用凭据,则如下所示:
Rails.application.credentials.google_key
或对于AWS一类的嵌套资源:
Rails.application.credentials.aws[:key]
但是,如果您使用的是 Rails 5.1或更低版本,则没有此功能。因此,您可以通过其他方式进行操作:
环境变量。您的程序环境始终可以导出ENV并进行检索。我总是这样做是为了避免简单的麻烦,例如测试电子邮件密码:
export GMAIL_PASSWORD="1234"
及其用法ENV['GMAIL_PASSWORD']
Secrets.yml。这是一个基本上充当master.key +凭证的文件,它充当环境的凭证处理程序。它很简陋,常常错误地偶然地承诺回购,但我们会尽力做到:
development:
secret_key_base: 1112sdasae1d13d1tfd1d3...
GMAIL_PASSWORD: '1234'
test:
secret_key_base: _your_secret_ as above
production:
secret_key_base: <%= secure_token %>
它的访问方式类似于Rails.application.secrets.GMAIL_PASSWORD
如果无法访问变量,则可能是因为secrets.yml文件未加载或环境错误。请注意,这些var嵌套在特定的环境中。