Передача config из rails4.1 secrets.yml в mongoid.yml

Вопрос:

Как передать конфигурацию из файла Rails 4.1 secrets.yml в файл mongoid.yml, если у меня есть сценарий ниже:

Файл config/secrets.yml

  default: &mongodb
mongodb_host: <%= ENV['TRG_MONGODB_HOST'] %>
mongodb_host_port: <%= ENV['TRG_MONGODB_HOST_PORT'] %>
mongodb_database: <%= ENV['TRG_MONGODB_DATABASE'] %>
mongodb_db_username: <%= ENV['TRG_MONGODB_DB_USER'] %>
mongodb_db_passowrd:  <%= ENV['TRG_MONGODB_DB_PASSWORD'] %>

development:
secret_key_base: xxxxxxxxyyyy
<<: *mongodb

Сокращенный файл config/mongoid.yml

 development:
# Configure available database sessions. (required)
sessions:
default:
uri: mongodb://username:[email protected]:17856/ffff

# uri: mongodb://Rails.application.secrets.mongodb_db_username:[email protected]secrets.mongodb_host:Rails.application.secrets.mongodb_host_port/Rails.application.secrets.mongodb_database

# uri: mongodb://ENV['mongodb_db_username']:ENV['mongodb_db_password']@ENV['mongodb_host']:ENV['mongodb_host_port']/ENV['mongodb_database']

Единственный способ, которым работает mongoid.yml, – это когда я напрямую добавляю настройки базы данных с помощью uri: mongodb://имя пользователя: [email protected]: 17856/ffff. Если я использую uri: mongodb//Rails.application.secrets.xx, настройки не подбираются. Кроме того, настройки не принимаются, когда я использую uri: mongodb://ENV [‘mongodb_db_username’].

Я также попытался передать переменные среды непосредственно в mongoid.yml, используя встроенный ruby, как этот uri: mongodb://<% = ENV [‘TRG_MONGODB_DB_USER’]%> но это также не сработало.

Любые предложения о том, как сделать файл Rails4.1 secrets.yml для передачи настроек в файл mongoid.yml.

Лучший ответ:

Наконец, я смог исправить это, передав config из файла secrets.yml в файл mongoid.yml или database.yml, используя встроенный рубин, как описано здесь: https://coderwall.com/p/3c2alg

Я должен был явно префикс ключей для настроек базы данных с символом в файле config/secrets.yml, чтобы вместо этого:

  default: &mongodb
  mongodb_host: <%= ENV['TRG_MONGODB_HOST'] %>
  mongodb_host_port: <%= ENV['TRG_MONGODB_HOST_PORT'] %>
  mongodb_database: <%= ENV['TRG_MONGODB_DATABASE'] %>
  mongodb_db_username: <%= ENV['TRG_MONGODB_DB_USER'] %>
  mongodb_db_passowrd:  <%= ENV['TRG_MONGODB_DB_PASSWORD'] %>

Теперь у нас есть следующее:

Файл config/secrets.yml

  default: &mongodb
  :mongodb_host: <%= ENV['TRG_MONGODB_HOST'] %>
  :mongodb_host_port: <%= ENV['TRG_MONGODB_HOST_PORT'] %>
  :mongodb_database: <%= ENV['TRG_MONGODB_DATABASE'] %>
  :mongodb_db_username: <%= ENV['TRG_MONGODB_DB_USER'] %>
  :mongodb_db_passowrd:  <%= ENV['TRG_MONGODB_DB_PASSWORD'] %>

Второе изменение заключалось в использовании встроенного рубина в файле mongodb.yml, поэтому мы имеем следующее:

а не просто

 Rails.application.secrets.mongodb_db_username

Окончательный uri в mongoid.yml выглядит так:

 uri: mongodb://<%= Rails.application.secrets.mongodb_db_username %>:<%= Rails.application.secrets.mongodb_db_password %>@<%= Rails.application.secrets.mongodb_host %>:<%= Rails.application.secrets.mongodb_host_port %>/<%= Rails.application.secrets.mongodb_database %>

Оцените статью
TechArks.Ru
Добавить комментарий