【问题标题】:passing config from rails4.1 secrets.yml to mongoid.yml将配置从 rails4.1 secrets.yml 传递到 mongoid.yml
【发布时间】:2014-07-23 15:51:44
【问题描述】:

假设我有以下场景,我如何将 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:password@champ.mongohq.com:17856/ffff

       # 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

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

mongoid.yml 工作的唯一方法是我使用 uri: mongodb://username:password@champ.mongohq.com:17856/ffff 直接添加数据库设置。如果我使用 uri: mongodb//Rails.application.secrets.xx 设置不会被拾取。此外,当我使用 uri: mongodb://ENV['mongodb_db_username'] 时,设置不会被选中。

我也尝试使用像这样的嵌入式 ruby​​ 将环境变量直接传递给 mongoid.yml uri:mongodb:// 但它也没有工作.

关于如何制作 Rails4.1 secrets.yml 文件以将设置传递给 mongoid.yml 文件的任何建议。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 mongoid mongoid4


    【解决方案1】:

    最后,我能够通过使用嵌入式 ruby​​ 将配置从 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 文件中使用嵌入的 ruby​​,所以我们有这个:

    而不仅仅是

     Rails.application.secrets.mongodb_db_username
    

    mongoid.yml 中的最终 uri 如下所示:

     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 %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 2019-12-20
      相关资源
      最近更新 更多