discourse/config/database.yml
Alan Guo Xiang Tan 45204e5c55
DEV: Support per-unicorn-worker DB variable overrides (#35615)
This commit adds support for setting ActiveRecord's database
configuration variables for unicorn workers via ENVs with the
`DISCOURSE_UNICORN_WORKER_DB_VARIABLES_` prefix.

For example to set `statement_timeout`, one would add the
`DISCOURSE_UNICORN_WORKER_DB_VARIABLES_STATEMENT_TIMEOUT` env with its
corresponding value. Do note that envs with the
`DISCOURSE_UNICORN_WORKER_DB_VARIABLES_` prefix will take precendent
over envs with the `DISCOURSE_DB_VARIABLES_` prefix.
2025-10-27 13:45:27 +08:00

64 lines
2 KiB
YAML

<%
db_variables =
ENV
.filter { |key, _| key.start_with?("DISCOURSE_DB_VARIABLES_") }
.transform_keys { |key| key.slice(("DISCOURSE_DB_VARIABLES_".length)..).downcase }
%>
development:
prepared_statements: false
adapter: postgresql
database: <%= ENV['DISCOURSE_DEV_DB'] || 'discourse_development' %>
min_messages: warning
pool: 5
checkout_timeout: <%= ENV['CHECKOUT_TIMEOUT'] || 5 %>
host_names:
### Don't include the port number here. Change the "port" site setting instead, at /admin/site_settings.
### If you change this setting you will need to
### - restart sidekiq if you change this setting
### - rebake all to posts using: `RAILS_ENV=production bundle exec rake posts:rebake`
- "<%= ENV['DISCOURSE_HOSTNAME'] || 'localhost' %>"
variables: <%= db_variables.to_json %>
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
<%
test_db = ENV["RAILS_DB"]
if !test_db.present?
test_db = "discourse_test"
if num = ENV["TEST_ENV_NUMBER"]
num = num.presence || "1"
test_db += "_#{num}"
end
end
%>
test:
prepared_statements: false
adapter: postgresql
database: <%= test_db %>
min_messages: warning
pool: 2
reaping_frequency: 0
checkout_timeout: <%= ENV["CHECKOUT_TIMEOUT"] || 5 %>
host_names:
- test.localhost
variables: <%= db_variables.to_json %>
# profile db is used for benchmarking using the script/bench.rb script
profile:
prepared_statements: false
adapter: postgresql
database: discourse_profile
min_messages: warning
pool: 5
host_names:
- "localhost"
# You may be surprised production is not here, it is sourced from application.rb using a monkey patch
# This is done for 2 reasons
#
# 1. we need to support blank settings correctly and rendering nothing in yaml/erb is a PITA
# 2. why go from object -> yaml -> object, pointless