LoginSignup
3
4

More than 5 years have passed since last update.

Rails4 rails_config を使って環境ごとの情報を切り替える

Last updated at Posted at 2015-07-18

rails_config が config に変更されました。

rails_config から config へ変更する方法は

Rails4 rails_config から 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 に追加します。

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)それぞれの設定項目を用意しています。

config/database.yml
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 も設定項目にします。

config/secrets.yml
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 のように利用しない設定を記載すると思います。

config/settings.yml
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 でデプロイしたときに置き換えられる前提です。

これを作ることで、後で本番環境の設定ファイルを作るときに悩む必要がなくなると思います。

config/settings/production.yml
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 の場合、バージョニングを有効にしておけば履歴管理できます。

一部の担当者のローカルにしかない状態は避けたいです。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4