将配置从rails4.1 secrets.yml传递给mongoid.yml

时间:2014-07-23 15:51:44

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

我如何将配置从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://&lt;%= ENV ['TRG_MONGODB_DB_USER']%&gt; 但它也做了不行。

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

1 个答案:

答案 0 :(得分:2)

最后,我能够通过使用嵌入式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 %>