Как получить глобальные переменные из файла конфигурации базы данных в приложении rails? - PullRequest
0 голосов
/ 27 марта 2019

Я хочу получить секретную информацию из другого места, кроме приложения 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
> 

В данном случае это не очень хорошее применение.Тогда есть ли правильный путь?

1 Ответ

1 голос
/ 27 марта 2019

В 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 +, выполняя роль промежуточного обработчика учетных данных для ваших сред.Он дергается и часто ошибочно совершает репо случайно, но мы делаем то, что можем:

    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 не загружается или вы находитесь в неправильной среде.Обратите внимание, что эти переменные вложены в определенные среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...