discourse/config/application.rb

183 lines
6.6 KiB
Ruby
Raw Normal View History

2013-02-06 03:16:51 +08:00
require File.expand_path('../boot', __FILE__)
require 'rails/all'
# Plugin related stuff
require_relative '../lib/discourse_plugin_registry'
2013-02-06 03:16:51 +08:00
2013-12-20 13:17:21 +08:00
# Global config
require_relative '../app/models/global_setting'
2013-02-06 03:16:51 +08:00
if defined?(Bundler)
Bundler.require(*Rails.groups(assets: %w(development test profile)))
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
2013-02-06 03:16:51 +08:00
end
module Discourse
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
2013-10-28 12:13:10 +08:00
# HACK!! regression in rubygems / bundler in ruby-head
if RUBY_VERSION == "2.1.0"
$:.map! do |path|
path = File.expand_path(path.sub("../../","../")) if path =~ /fast_xor/ && !File.directory?(File.expand_path(path))
path
end
end
2013-02-06 03:16:51 +08:00
require 'discourse'
require 'js_locale_helper'
2013-02-06 03:16:51 +08:00
# mocha hates us, active_support/testing/mochaing.rb line 2 is requiring the wrong
# require, patched in source, on upgrade remove this
if Rails.env.test? || Rails.env.development?
require "mocha/version"
require "mocha/deprecation"
if Mocha::VERSION == "0.13.3" && Rails::VERSION::STRING == "3.2.12"
Mocha::Deprecation.mode = :disabled
end
end
2013-02-06 03:16:51 +08:00
# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += Dir["#{config.root}/app/serializers"]
config.autoload_paths += Dir["#{config.root}/lib/validators/"]
config.autoload_paths += Dir["#{config.root}/app"]
2013-02-06 03:16:51 +08:00
# Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named.
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
config.assets.paths += %W(#{config.root}/config/locales)
2013-11-06 19:39:08 +08:00
# explicitly precompile any images in plugins ( /assets/images ) path
config.assets.precompile += [lambda do |filename, path|
path =~ /assets\/images/ && !%w(.js .css).include?(File.extname(filename))
end]
config.assets.precompile += ['vendor.js', 'common.css', 'desktop.css', 'mobile.css', 'admin.js', 'admin.css', 'shiny/shiny.css', 'preload_store.js', 'browser-update.js', 'embed.css']
2013-04-29 08:02:04 +08:00
# Precompile all defer
Dir.glob("#{config.root}/app/assets/javascripts/defer/*.js").each do |file|
config.assets.precompile << "defer/#{File.basename(file)}"
2013-04-29 08:02:04 +08:00
end
2013-02-06 03:16:51 +08:00
2013-03-01 03:31:39 +08:00
# Precompile all available locales
Dir.glob("#{config.root}/app/assets/javascripts/locales/*.js.erb").each do |file|
config.assets.precompile << "locales/#{file.match(/([a-z_A-Z]+\.js)\.erb$/)[1]}"
2013-03-01 03:31:39 +08:00
end
2013-02-06 03:16:51 +08:00
# Activate observers that should always be running.
config.active_record.observers = [
:user_email_observer,
2013-02-26 00:42:20 +08:00
:user_action_observer,
2013-02-06 03:16:51 +08:00
:post_alert_observer,
:search_observer
]
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
config.time_zone = 'Eastern Time (US & Canada)'
# auto-load server locale in plugins
config.i18n.load_path += Dir["#{Rails.root}/plugins/*/config/locales/server.*.yml"]
2013-02-06 03:16:51 +08:00
# Configure the default encoding used in templates for Ruby 1.9.
config.encoding = 'utf-8'
2013-02-06 03:16:51 +08:00
# Configure sensitive parameters which will be filtered from the log file.
2014-01-06 20:03:53 +08:00
config.filter_parameters += [
:password,
:pop3s_polling_password,
:s3_secret_access_key,
:twitter_consumer_secret,
:facebook_app_secret,
:github_client_secret,
:discourse_org_access_key,
]
2013-02-06 03:16:51 +08:00
# Enable the asset pipeline
config.assets.enabled = true
# Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.2.4'
# We need to be able to spin threads
config.active_record.thread_safe!
2013-02-26 00:42:20 +08:00
# see: http://stackoverflow.com/questions/11894180/how-does-one-correctly-add-custom-sql-dml-in-migrations/11894420#11894420
2013-02-06 03:16:51 +08:00
config.active_record.schema_format = :sql
2013-02-26 00:42:20 +08:00
# per https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet
2013-02-06 03:16:51 +08:00
config.pbkdf2_iterations = 64000
config.pbkdf2_algorithm = "sha256"
2013-02-06 03:16:51 +08:00
# dumping rack lock cause the message bus does not work with it (throw :async, it catches Exception)
# see: https://github.com/sporkrb/spork/issues/66
# rake assets:precompile also fails
config.threadsafe! unless rails4? || $PROGRAM_NAME =~ /spork|rake/
2013-02-06 03:16:51 +08:00
# rack lock is nothing but trouble, get rid of it
# for some reason still seeing it in Rails 4
config.middleware.delete Rack::Lock
2013-02-06 03:16:51 +08:00
# route all exceptions via our router
config.exceptions_app = self.routes
# Our templates shouldn't start with 'discourse/templates'
config.handlebars.templates_root = 'discourse/templates'
require 'discourse_redis'
2013-02-06 03:16:51 +08:00
# Use redis for our cache
config.cache_store = DiscourseRedis.new_redis_store
2013-02-06 03:16:51 +08:00
# we configure rack cache on demand in an initializer
# our setup does not use rack cache and instead defers to nginx
2013-02-06 03:16:51 +08:00
config.action_dispatch.rack_cache = nil
# ember stuff only used for asset precompliation, production variant plays up
config.ember.variant = :development
2013-09-17 02:08:55 +08:00
config.ember.ember_location = "#{Rails.root}/vendor/assets/javascripts/production/ember.js"
config.ember.handlebars_location = "#{Rails.root}/vendor/assets/javascripts/handlebars.js"
2013-11-13 23:14:22 +08:00
# Since we are using strong_parameters, we can disable and remove attr_accessible.
config.active_record.whitelist_attributes = false unless rails4?
require 'auth'
2013-11-13 23:14:22 +08:00
Discourse.activate_plugins! unless Rails.env.test?
2013-02-26 00:42:20 +08:00
config.after_initialize do
2013-09-17 08:23:21 +08:00
# So open id logs somewhere sane
2013-02-06 03:16:51 +08:00
OpenID::Util.logger = Rails.logger
2013-09-17 08:23:21 +08:00
if plugins = Discourse.plugins
plugins.each{|plugin| plugin.notify_after_initialize}
end
2013-02-06 03:16:51 +08:00
end
# This is not really required per-se, but we do not want to support
# XML params, we see errors in our logs about malformed XML and there
# absolutly no spot in our app were we use XML as opposed to JSON endpoints
2013-12-31 12:11:55 +08:00
#
# Rails 4 no longer includes this by default
ActionDispatch::ParamsParser::DEFAULT_PARSERS.delete(Mime::XML) unless rails4?
2013-11-20 07:10:12 +08:00
if ENV['RBTRACE'] == "1"
require 'rbtrace'
end
2013-02-06 03:16:51 +08:00
end
end