1

以下のシナリオがあると仮定して、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']を使用すると、設定が取得されません。

また、このuri:mongodb://<%= ENV['TRG_MONGODB_DB_USER'] %> のような埋め込みルビーを使用して、環境変数を直接 mongoid.yml に渡そうとしましたが、これも機能しませんでした。

Rails4.1 secrets.yml ファイルを作成して mongoid.yml ファイルに設定を渡す方法に関する提案。

4

1 に答える 1

2

最後に、 https ://coderwall.com/p/3c2alg で説明されているように、埋め込まれた ruby​​ を使用して、secrets.yml ファイルから mongoid.yml または database.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'] %>

これで次のようになりました。

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

2 番目の変更は、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 %>
于 2014-07-24T09:26:20.897 に答える