我如何将配置从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文件的任何建议。
答案 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 %>