概要
rails の database.yml では環境変数から設定値を取得し、取得出来なかった場合は、デフォルト値を使う書き方が出来ます。同じ事を Redis の設定ファイルでも行う方法です。
若手から実現したかったけど、やり方が分からずに断念していたと聞いたので、記事に残すことにしました。
環境
Rails 6.0.3
Redis の設定ファイル
設定ファイルは config/redis.yml です。
default: &default
host: <%= ENV.fetch('SESSION_DB_HOST') { 'session_db' } %>
port: <%= ENV.fetch('SESSION_DB_PORT') { 6379 } %>
development:
<<: *default
test:
<<: *default
production:
<<: *default
host と port を database.yml と同じく、環境変数が存在すれば環境変数から取得しセット、環境変数が存在しない場合はブロックで指定したデフォルト値をセットする様にしています。
Redis の初期化
config/initializers/redis.rb で Redis の初期化を行います。
path = Rails.root + 'config/redis.yml'
yaml = Pathname.new path if path
config =
if yaml && yaml.exist?
YAML.load(ERB.new(yaml.read).result)[Rails.env] || {}
else
raise "Could not load redis configuration. No such file - #{path}"
end
Redis.current = ConnectionPool.new(size: 10, timeout: 5) do
Redis.new(
host: config['host'],
port: config['port']
)
end
YAML.load(ERB.new(yaml.read).result)[Rails.env] の箇所で、読み込んだ redis.yml を ERB クラスを使って、eRuby スクリプトとして処理をしています。
参考