rails_config が config に変更されました。
rails_config から config へ変更する方法は
Rails4 rails_config から config への変更
を参照してください。
参考
以下サイトを参考にしました。
- https://github.com/railsconfig/rails_config
- http://qiita.com/yumiyon/items/32c6afb5e2e5b7ff369e
- http://blog.10rane.com/2015/04/08/manage-constant-in-rails_config/
ソースリポジトリ
ソースは以下のリポジトリを参照してください。
https://github.com/katsuhiko/sample_app_rails_4
バージョン
version |
---|
rails 4.2.3 |
rails_config 0.4.2 |
方針
EC2/Capistrano3 を利用したデプロイを考えています。
環境変数を使い、環境ごとの情報を切り替えることにこだわる必要はないと思っています。
config/settings/production.yml をシンボリックファイルとして置き換えることでローカル開発環境、本番環境の切り替えを行います。
環境ごとに切り替えるファイルを何個も用意したくないので、production.yml にすべてを集中させます。
ローカル開発環境で設定を変えたい場合 config/settings.local.yml
を利用します。
このファイルは git の除外対象になっているので、誤って開発者固有の設定が Commit & Push されることを防ぎます。
インストール
Gemfile に追加します。
gem "rails_config"
bundle install
を実施し、rails_config の設定を行います。
$ bundle install
$ bundle exec rails g rails_config:install
詳細については、参考先のサイトを参照してください。
各種ファイル
database.yml
bundle exec rake db:test:prepare
など、development と test の両方の情報を同時に参照するコマンドもあります。
そのため、冗長になりますが、環境(development, test, production)それぞれの設定項目を用意しています。
default: &default
adapter: mysql2
encoding: utf8
pool: <%= Settings.databases.pool %>
host: <%= Settings.databases.host %>
port: <%= Settings.databases.port %>
username: <%= Settings.databases.username %>
password: <%= Settings.databases.password %>
development:
<<: *default
database: <%= Settings.databases.development.database %>
test:
<<: *default
database: <%= Settings.databases.test.database %>
production:
<<: *default
database: <%= Settings.databases.production.database %>
secrets.yml
secret_key_base も設定項目にします。
development:
secret_key_base: <%= Settings.secrets.secret_key_base %>
test:
secret_key_base: <%= Settings.secrets.secret_key_base %>
production:
secret_key_base: <%= Settings.secrets.secret_key_base %>
settings.yml
settings.yml で database.yml, secrets.yml の項目に値を設定します。
このファイルの値で、ローカル開発環境が動く状態にするのが良いと思っています。
本番環境の情報や、外部サービスとの連携情報は記載しません。
外部サービスを使う場合、利用しなくても最低限動作する仕組みは必要になりますが、 s3_enabled: false
のように利用しない設定を記載すると思います。
secrets:
secret_key_base: 47f6da7af1231cdee914bdbe3944d0b3dd8c3a56756f265d5babd339665569e85c19943dcebf5a132182a43f912183874a649840bdf3c36be4be568f83d7938f
databases:
pool: 2
host: localhost
port: 3306
username: root
password:
development:
database: sample_app_rails_4_development
test:
database: sample_app_rails_4_test
production:
database: sample_app_rails_4_production
production.yml
下のような内容で、本番環境用の production.yml を作るときにどんな項目をセットすれば良いかのヒントがわかるようにして、リポジトリに追加します。
このファイルは、Capistrano3 でデプロイしたときに置き換えられる前提です。
これを作ることで、後で本番環境の設定ファイルを作るときに悩む必要がなくなると思います。
secret:
secret_key_base: "rake secret"
databases:
pool: 5
host: endpoint
port: 3306
username: username
password: password
production:
database: sample_app_rails_4_production
本番環境用の production.yml をどこでか管理すべきかは悩みます。
きちんと private 管理された git もしくは S3 が良いのではないかと思っています。
S3 の場合、バージョニングを有効にしておけば履歴管理できます。
一部の担当者のローカルにしかない状態は避けたいです。