はじめに
DBのパスワードなどの設定は、PCというか開発環境ごとに異なることが多いです。ですが、Railsを利用して共同開発する場合、database.ymlなどに、DBに関する設定をそのまま定数に記入すると、ある特定の環境でしか動かなくなるでしょう。また、そういうデータは、GitHubのようなオンラインのホスティングサービスに公開したくないものです。
そこで、環境に依存する設定値を環境変数として扱って、どんな開発環境のDB設定値でも柔軟に対応できるgem(dotenv-rails)を使って管理して見ましょう。
環境
- macOS HighSierra 10.13.6
- Rails 5.2.0
- Ruby 2.5.1
- mysql 5.7.22
- mysqlはdockerに作成
- Docker version 18.03.1-ce
導入方法
Gemfileに以下を記述
gem 'dotenv-rails'
そして、書きを実行することで、gemを インストール
$ bundle install
環境変数を設定
top of your application に、.env
ファイルを作成。
例えばこんな感じ。
.env
RAILS_MAX_THREADS = 5
DATABASE_HOST = 127.0.0.1
DATABASE_USER = test
DATABASE_PASSWORD = test
DATABASE_NAME = my_project
すると、rails c
で確認できるようになります。
irb(main):002:0> ENV['RAILS_MAX_THREADS']
=> "5"
irb(main):003:0> ENV['DATABASE_HOST']
=> "127.0.0.1"
irb(main):004:0> ENV['DATABASE_USER']
=> "test"
環境変数の利用法
database.yml
・・・
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
host: <%= ENV.fetch("DATABASE_HOST") { "127.0.0.1" } %>
username: <%= ENV.fetch("DATABASE_USER") { "test" } %>
password: <%= ENV.fetch("DATABASE_PASSWORD") { "test" } %>
database: <%= ENV.fetch("DATABASE_NAME") { "my_project" } %>
・・・
これで使えるようになります。
こうすれば、環境ごとに異なる設定値でも.env
に記述すれば、実行環境が異なっても使えるようになります。
参考
- bkeepers/dotenv: A Ruby gem to load environment variables from `.env`.
- https://qiita.com/noraworld/items/bfa80811c9e30b4474af
- https://qiita.com/ueokande/items/80048f886082fea5b776
- https://qiita.com/closer/items/f8d8ba00ae86d7051764
- https://qiita.com/NeXTSTEP2OSX/items/2c0849e15e95d309ca15
- http://vdeep.net/rubyonrails-dotenv