【问题标题】:How to get global variables from database config file in rails application?如何从 Rails 应用程序的数据库配置文件中获取全局变量?
【发布时间】:2019-03-27 13:33:00
【问题描述】:

我想从 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
> 

在这种情况下似乎不是一个好的用法。那么有没有正确的方法呢?

【问题讨论】:

  • 为什么要全局声明数据库用户名和密码?您应该使用环境变量而不是 ENV[:username], ENV[:password]
  • 那是特殊需求。不要将这些信息保存在本地。

标签: ruby-on-rails database


【解决方案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 或更低版本,则您没有此能力。所以,你可以用不同的方式来做:

  1. 环境变量。您的程序环境始终可以导出 ENV 并检索它。我总是为测试电子邮件密码之类的简单麻烦事这样做:

    export GMAIL_PASSWORD="1234" 及其用法,ENV['GMAIL_PASSWORD']

  2. Secrets.yml。这是一个基本上早于 master.key + credentials 的文件,它充当环境的中间凭证处理程序。它很笨拙,并且经常错误地意外地承诺回购,但我们会尽我们所能:

    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 文件或者您处于错误的环境中。请注意,这些变量嵌套在特定环境中。

【讨论】:

  • 谢谢。我知道这种方式。但现在只想从远程服务中获取秘密。是的,不是本地服务,而是第三方服务。
  • 我们改变了想法并将它们设置为 env。
猜你喜欢
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多