こんにちは、鈴木です。
Ruby on Rails ではデータベースの接続情報を database.yml というファイルに保存します。
database.yml にはデータベースに接続するためのパスワードが記述されます。
そのため、database.yml をリポジトリにコミットするわけにはいきません。
そこで今回は、database.yml の管理方法にどのような方法があるのかご紹介します。
設定ファイルのサンプルファイルだけをコミットする方式
database.yml はコミットせずに、database.yml のサンプルファイルをリポジトリにコミッします。
ここではサンプルファイルの名前は database.yml.sample として話を進めます。
プロジェクトに参加する人は、最初にリポジトリからソースコードをチェックアウトします。
次に database.yml.sample の内容を参考に database.yml を作成します。
あとは通常通り rake db:create db:migrate db:seed としてからサーバを起動すれば OK です。
チェックアウト後に database.yml を作成する手順が必要ですが、
「パスワードが書かれた database.yml をコミットしない」という目標は達成できました。
これは Web ベースのプロジェクト管理ソフトウェアとして有名な Redmine で採用されている方式です。
環境変数に設定する方式
この方式は、database.yml 自体はリポジトリにコミットしてしまいます。
ただし、パスワード等は環境変数から取得するように記述しておきます。
具体的には、以下のように環境変数から値を取るように記述します。
(database.yml には <%= ... %> で Ruby コードを埋め込むことができます。)
1 2 3 4 5 6 7 8 9 |
development: adapter: postgresql encoding: unicode database: example_development pool: 5 username: <%= ENV['RAILS_DATABASE_USERNAME'] || 'example' %> password: <%= ENV['RAILS_DATABASE_PASSWORD'] %> host: <%= ENV['RAILS_DATABASE_HOST'] || 'localhost' %> ... |
パスワードが database.yml に直接書かれていないので、リポジトリにコミットしても問題ありません。
起動するときは、以下のように環境変数を設定してから rails server で起動します。
1 2 |
export RAILS_DATABASE_PASSWORD=1234567 rails server |
この方式はいくつかの heroku プラグイン(Mailgunなど)で使われているようです。
みなさんはどちらの方法が良いと思いますか?