2013-02-06 03:16:51 +08:00
|
|
|
require File.expand_path('../boot', __FILE__)
|
|
|
|
require 'rails/all'
|
|
|
|
|
|
|
|
# Plugin related stuff
|
2014-07-23 07:02:22 +08:00
|
|
|
require_relative '../lib/discourse_event'
|
|
|
|
require_relative '../lib/discourse_plugin'
|
2013-05-02 05:10:51 +08:00
|
|
|
require_relative '../lib/discourse_plugin_registry'
|
2013-02-06 03:16:51 +08:00
|
|
|
|
2017-01-10 06:10:14 +08:00
|
|
|
require_relative '../lib/plugin_gem'
|
|
|
|
|
2013-12-20 13:17:21 +08:00
|
|
|
# Global config
|
|
|
|
require_relative '../app/models/global_setting'
|
2017-01-10 06:10:14 +08:00
|
|
|
GlobalSetting.configure!
|
|
|
|
unless Rails.env.test? && ENV['LOAD_PLUGINS'] != "1"
|
|
|
|
require_relative '../lib/custom_setting_providers'
|
|
|
|
end
|
|
|
|
GlobalSetting.load_defaults
|
2013-12-20 13:17:21 +08:00
|
|
|
|
2014-08-18 14:42:48 +08:00
|
|
|
require 'pry-rails' if Rails.env.development?
|
2014-05-26 17:46:57 +08:00
|
|
|
|
2013-02-06 03:16:51 +08:00
|
|
|
if defined?(Bundler)
|
2013-03-23 23:02:59 +08:00
|
|
|
Bundler.require(*Rails.groups(assets: %w(development test profile)))
|
2014-01-14 13:59:55 +08:00
|
|
|
end
|
|
|
|
|
2013-02-06 03:16:51 +08:00
|
|
|
module Discourse
|
|
|
|
class Application < Rails::Application
|
2017-01-10 06:10:14 +08:00
|
|
|
|
2014-05-14 08:20:23 +08:00
|
|
|
def config.database_configuration
|
2014-08-18 14:42:48 +08:00
|
|
|
if Rails.env.production?
|
2014-05-14 08:20:23 +08:00
|
|
|
GlobalSetting.database_config
|
|
|
|
else
|
|
|
|
super
|
|
|
|
end
|
|
|
|
end
|
2013-02-06 03:16:51 +08:00
|
|
|
# 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.
|
|
|
|
|
|
|
|
require 'discourse'
|
2014-05-06 06:04:09 +08:00
|
|
|
require 'es6_module_transpiler/rails'
|
2013-05-30 13:53:40 +08:00
|
|
|
require 'js_locale_helper'
|
2013-02-06 03:16:51 +08:00
|
|
|
|
2015-03-13 13:15:13 +08:00
|
|
|
# tiny file needed by site settings
|
|
|
|
require 'highlight_js/highlight_js'
|
|
|
|
|
2013-05-14 13:20:28 +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
|
|
|
|
|
2015-05-29 11:22:50 +08:00
|
|
|
# Disable so this is only run manually
|
|
|
|
# we may want to change this later on
|
|
|
|
# issue is image_optim crashes on missing dependencies
|
|
|
|
config.assets.image_optim = false
|
|
|
|
|
2013-02-06 03:16:51 +08:00
|
|
|
# Custom directories with classes and modules you want to be autoloadable.
|
2013-05-23 12:52:12 +08:00
|
|
|
config.autoload_paths += Dir["#{config.root}/app/serializers"]
|
|
|
|
config.autoload_paths += Dir["#{config.root}/lib/validators/"]
|
2013-10-01 15:04:02 +08:00
|
|
|
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 ]
|
|
|
|
|
2014-07-09 22:27:47 +08:00
|
|
|
config.assets.paths += %W(#{config.root}/config/locales #{config.root}/public/javascripts)
|
2013-02-06 03:16:51 +08:00
|
|
|
|
2015-02-21 04:48:45 +08:00
|
|
|
# Allows us to skip minifincation on some files
|
|
|
|
config.assets.skip_minification = []
|
|
|
|
|
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]
|
|
|
|
|
2017-04-12 22:52:52 +08:00
|
|
|
config.assets.precompile += %w{
|
2017-04-17 23:04:00 +08:00
|
|
|
vendor.js admin.js preload-store.js
|
2017-04-12 22:52:52 +08:00
|
|
|
browser-update.js break_string.js ember_jquery.js
|
|
|
|
pretty-text-bundle.js wizard-application.js
|
|
|
|
wizard-vendor.js plugin.js plugin-third-party.js
|
2017-07-27 23:51:04 +08:00
|
|
|
markdown-it-bundle.js
|
2017-04-12 22:52:52 +08:00
|
|
|
}
|
2013-02-06 03:16:51 +08:00
|
|
|
|
2013-03-01 03:31:39 +08:00
|
|
|
# Precompile all available locales
|
2013-04-29 14:52:56 +08:00
|
|
|
Dir.glob("#{config.root}/app/assets/javascripts/locales/*.js.erb").each do |file|
|
2013-03-06 22:45:07 +08:00
|
|
|
config.assets.precompile << "locales/#{file.match(/([a-z_A-Z]+\.js)\.erb$/)[1]}"
|
2013-03-01 03:31:39 +08:00
|
|
|
end
|
|
|
|
|
2017-04-15 03:53:05 +08:00
|
|
|
# out of the box sprockets 3 grabs loose files that are hanging in assets,
|
|
|
|
# the exclusion list does not include hbs so you double compile all this stuff
|
|
|
|
initializer :fix_sprockets_loose_file_searcher, after: :set_default_precompile do |app|
|
|
|
|
app.config.assets.precompile.delete(Sprockets::Railtie::LOOSE_APP_ASSETS)
|
|
|
|
start_path = ::Rails.root.join("app/assets").to_s
|
2017-04-17 23:04:00 +08:00
|
|
|
exclude = ['.es6', '.hbs', '.js', '.css', '']
|
2017-04-15 03:53:05 +08:00
|
|
|
app.config.assets.precompile << lambda do |logical_path, filename|
|
|
|
|
filename.start_with?(start_path) &&
|
|
|
|
!exclude.include?(File.extname(logical_path))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-02-06 03:16:51 +08:00
|
|
|
# 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.
|
2014-10-27 23:31:09 +08:00
|
|
|
config.time_zone = 'UTC'
|
2013-02-06 03:16:51 +08:00
|
|
|
|
2015-04-09 23:04:14 +08:00
|
|
|
# auto-load locales in plugins
|
|
|
|
# NOTE: we load both client & server locales since some might be used by PrettyText
|
|
|
|
config.i18n.load_path += Dir["#{Rails.root}/plugins/*/config/locales/*.yml"]
|
2013-02-06 03:16:51 +08:00
|
|
|
|
|
|
|
# Configure the default encoding used in templates for Ruby 1.9.
|
2013-02-18 14:34:43 +08:00
|
|
|
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,
|
2014-08-27 07:52:35 +08:00
|
|
|
:pop3_polling_password,
|
2016-08-23 08:13:15 +08:00
|
|
|
:api_key,
|
2014-01-06 20:03:53 +08:00
|
|
|
:s3_secret_access_key,
|
|
|
|
:twitter_consumer_secret,
|
|
|
|
:facebook_app_secret,
|
2014-07-17 00:25:24 +08:00
|
|
|
:github_client_secret
|
2014-01-06 20:03:53 +08:00
|
|
|
]
|
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
|
|
|
|
|
2015-09-23 13:24:30 +08:00
|
|
|
config.active_record.raise_in_transactional_callbacks = true
|
2014-10-15 15:04:47 +08:00
|
|
|
|
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
|
2013-07-23 09:36:01 +08:00
|
|
|
config.pbkdf2_algorithm = "sha256"
|
2013-02-06 03:16:51 +08:00
|
|
|
|
2013-10-10 11:16:09 +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
|
|
|
|
|
2014-07-10 13:18:31 +08:00
|
|
|
# ETags are pointless, we are dynamically compressing
|
|
|
|
# so nginx strips etags, may revisit when mainline nginx
|
|
|
|
# supports etags (post 1.7)
|
|
|
|
config.middleware.delete Rack::ETag
|
|
|
|
|
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'
|
2016-12-20 00:19:10 +08:00
|
|
|
config.handlebars.raw_template_namespace = "Discourse.RAW_TEMPLATES"
|
2013-02-06 03:16:51 +08:00
|
|
|
|
2013-03-11 20:33:20 +08:00
|
|
|
require 'discourse_redis'
|
2014-05-07 06:23:52 +08:00
|
|
|
require 'logster/redis_store'
|
2016-03-11 17:25:24 +08:00
|
|
|
require 'freedom_patches/redis'
|
2013-02-06 03:16:51 +08:00
|
|
|
# Use redis for our cache
|
2013-03-11 20:33:20 +08:00
|
|
|
config.cache_store = DiscourseRedis.new_redis_store
|
2014-05-07 06:23:52 +08:00
|
|
|
$redis = DiscourseRedis.new
|
2014-05-08 04:52:47 +08:00
|
|
|
Logster.store = Logster::RedisStore.new(DiscourseRedis.new)
|
2013-02-06 03:16:51 +08:00
|
|
|
|
2013-04-11 14:24:08 +08:00
|
|
|
# we configure rack cache on demand in an initializer
|
|
|
|
# our setup does not use rack cache and instead defers to nginx
|
2017-07-28 09:20:09 +08:00
|
|
|
config.action_dispatch.rack_cache = nil
|
2013-02-06 03:16:51 +08:00
|
|
|
|
2013-04-11 14:24:08 +08:00
|
|
|
# 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-04-11 14:24:08 +08:00
|
|
|
|
2013-08-26 10:52:36 +08:00
|
|
|
require 'auth'
|
2017-07-28 09:20:09 +08:00
|
|
|
Discourse.activate_plugins! unless Rails.env.test? && ENV['LOAD_PLUGINS'] != ("1")
|
2013-08-01 13:59:57 +08:00
|
|
|
|
2015-03-09 08:45:36 +08:00
|
|
|
if GlobalSetting.relative_url_root.present?
|
|
|
|
config.relative_url_root = GlobalSetting.relative_url_root
|
|
|
|
end
|
|
|
|
|
2017-04-12 22:52:52 +08:00
|
|
|
require_dependency 'stylesheet/manager'
|
|
|
|
|
2013-02-26 00:42:20 +08:00
|
|
|
config.after_initialize do
|
2016-12-22 10:13:14 +08:00
|
|
|
# require common dependencies that are often required by plugins
|
|
|
|
# in the past observers would load them as side-effects
|
|
|
|
# correct behavior is for plugins to require stuff they need,
|
|
|
|
# however it would be a risky and breaking change not to require here
|
|
|
|
require_dependency 'category'
|
|
|
|
require_dependency 'post'
|
|
|
|
require_dependency 'topic'
|
|
|
|
require_dependency 'user'
|
|
|
|
require_dependency 'post_action'
|
|
|
|
require_dependency 'post_revision'
|
|
|
|
require_dependency 'notification'
|
|
|
|
require_dependency 'topic_user'
|
|
|
|
require_dependency 'group'
|
|
|
|
require_dependency 'user_field'
|
|
|
|
require_dependency 'post_action_type'
|
2017-03-16 14:44:09 +08:00
|
|
|
# Ensure that Discourse event triggers for web hooks are loaded
|
|
|
|
require_dependency 'web_hook'
|
2016-12-22 10:13:14 +08:00
|
|
|
|
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
|
2017-07-28 09:20:09 +08:00
|
|
|
plugins.each { |plugin| plugin.notify_after_initialize }
|
2013-09-17 08:23:21 +08:00
|
|
|
end
|
2017-07-28 00:08:10 +08:00
|
|
|
|
|
|
|
# This nasty hack is required for not precompiling QUnit assets
|
|
|
|
# in test mode. see: https://github.com/rails/sprockets-rails/issues/299#issuecomment-167701012
|
|
|
|
ActiveSupport.on_load(:action_view) do
|
|
|
|
default_checker = ActionView::Base.precompiled_asset_checker
|
|
|
|
|
|
|
|
ActionView::Base.precompiled_asset_checker = -> logical_path do
|
|
|
|
default_checker[logical_path] ||
|
|
|
|
%w{qunit.js qunit.css test_helper.css test_helper.js wizard/test/test_helper.js}.include?(logical_path)
|
|
|
|
end
|
|
|
|
end
|
2013-02-06 03:16:51 +08:00
|
|
|
end
|
2013-09-16 10:58:26 +08:00
|
|
|
|
2013-11-20 07:10:12 +08:00
|
|
|
if ENV['RBTRACE'] == "1"
|
|
|
|
require 'rbtrace'
|
|
|
|
end
|
|
|
|
|
2016-12-08 11:49:39 +08:00
|
|
|
config.generators do |g|
|
|
|
|
g.test_framework :rspec, fixture: false
|
|
|
|
end
|
|
|
|
|
2013-02-06 03:16:51 +08:00
|
|
|
end
|
|
|
|
end
|
2014-12-22 22:59:07 +08:00
|
|
|
|
|
|
|
if defined?(PhusionPassenger)
|
|
|
|
PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
|
|
|
if forked
|
|
|
|
Discourse.after_fork
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|