Source DB config more cleanly, fixes issues with socket in prd

This commit is contained in:
Sam 2014-01-14 16:59:55 +11:00
parent fd95dbe75a
commit abe814412e
3 changed files with 32 additions and 15 deletions

View File

@ -16,6 +16,19 @@ class GlobalSetting
end
end
def self.database_config
hash = {"adapter" => "postgresql"}
%w{pool timeout socket host port username password}.each do |s|
if val = self.send("db_#{s}")
hash[s] = val
end
end
hash["host_names"] = [ hostname ]
hash["database"] = db_name
{"production" => hash}
end
class BaseProvider
def self.coerce(setting)

View File

@ -8,10 +8,21 @@ require_relative '../lib/discourse_plugin_registry'
require_relative '../app/models/global_setting'
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
Bundler.require(*Rails.groups(assets: %w(development test profile)))
# If you want your assets lazily compiled in production, use this line
# Bundler.require(:default, :assets, Rails.env)
end
# PATCH DB configuration
class Rails::Application::Configuration
def database_configuration_with_global_config
if Rails.env == "production"
GlobalSetting.database_config
else
database_configuration_without_global_config
end
end
alias_method_chain :database_configuration, :global_config
end
module Discourse

View File

@ -33,15 +33,8 @@ profile:
host_names:
- "localhost"
production:
pool: <%= GlobalSetting.db_pool %>
timeout: <%= GlobalSetting.db_timeout %>
adapter: postgresql
socket: <%= GlobalSetting.db_socket %>
host: <%= GlobalSetting.db_host %>
port: <%= GlobalSetting.db_port %>
database: <%= GlobalSetting.db_name %>
username: <%= GlobalSetting.db_username %>
password: <%= GlobalSetting.db_password %>
host_names:
- <%= GlobalSetting.hostname %>
# 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