2018-01-14 20:43:07 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2018-11-09 02:36:18 -05:00
|
|
|
# note, we require 2.5.2 and up cause 2.5.1 had some mail bugs we no longer
|
|
|
|
# monkey patch, so this avoids people booting with this problem version
|
2018-05-21 19:21:47 -04:00
|
|
|
begin
|
2021-03-30 03:44:53 -04:00
|
|
|
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.5.2")
|
2018-11-09 02:36:18 -05:00
|
|
|
STDERR.puts "Discourse requires Ruby 2.5.2 or up"
|
2018-05-21 19:21:47 -04:00
|
|
|
exit 1
|
|
|
|
end
|
|
|
|
rescue
|
|
|
|
# no String#match?
|
2018-11-09 02:36:18 -05:00
|
|
|
STDERR.puts "Discourse requires Ruby 2.5.2 or up"
|
2018-05-21 19:21:47 -04:00
|
|
|
exit 1
|
|
|
|
end
|
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
require File.expand_path('../boot', __FILE__)
|
2019-02-06 01:45:48 -05:00
|
|
|
require 'active_record/railtie'
|
|
|
|
require 'action_controller/railtie'
|
|
|
|
require 'action_view/railtie'
|
|
|
|
require 'action_mailer/railtie'
|
|
|
|
require 'sprockets/railtie'
|
2020-06-15 03:56:57 -04:00
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
# Plugin related stuff
|
2019-10-06 14:47:33 -04:00
|
|
|
require_relative '../lib/plugin_initialization_guard'
|
2014-07-22 19:02:22 -04:00
|
|
|
require_relative '../lib/discourse_event'
|
2013-05-01 17:10:51 -04:00
|
|
|
require_relative '../lib/discourse_plugin_registry'
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2017-01-09 17:10:14 -05:00
|
|
|
require_relative '../lib/plugin_gem'
|
|
|
|
|
2013-12-20 00:17:21 -05:00
|
|
|
# Global config
|
|
|
|
require_relative '../app/models/global_setting'
|
2017-01-09 17:10:14 -05:00
|
|
|
GlobalSetting.configure!
|
|
|
|
unless Rails.env.test? && ENV['LOAD_PLUGINS'] != "1"
|
|
|
|
require_relative '../lib/custom_setting_providers'
|
|
|
|
end
|
|
|
|
GlobalSetting.load_defaults
|
2020-03-05 15:37:49 -05:00
|
|
|
if GlobalSetting.try(:cdn_url).present? && GlobalSetting.cdn_url !~ /^https?:\/\//
|
|
|
|
STDERR.puts "WARNING: Your CDN URL does not begin with a protocol like `https://` - this is probably not going to work"
|
|
|
|
end
|
2013-12-20 00:17:21 -05:00
|
|
|
|
2019-06-12 22:58:27 -04:00
|
|
|
if ENV['SKIP_DB_AND_REDIS'] == '1'
|
|
|
|
GlobalSetting.skip_db = true
|
|
|
|
GlobalSetting.skip_redis = true
|
|
|
|
end
|
|
|
|
|
2020-06-15 04:04:41 -04:00
|
|
|
if !GlobalSetting.skip_db?
|
2020-06-15 04:02:30 -04:00
|
|
|
require 'rails_failover/active_record'
|
|
|
|
end
|
|
|
|
|
2020-06-15 04:04:41 -04:00
|
|
|
if !GlobalSetting.skip_redis?
|
2020-06-15 04:02:30 -04:00
|
|
|
require 'rails_failover/redis'
|
|
|
|
end
|
|
|
|
|
2014-08-18 02:42:48 -04:00
|
|
|
require 'pry-rails' if Rails.env.development?
|
2014-05-26 05:46:57 -04:00
|
|
|
|
2020-08-31 06:14:09 -04:00
|
|
|
require 'discourse_fonts'
|
|
|
|
|
2021-03-15 18:47:57 -04:00
|
|
|
require_relative '../lib/zeitwerk_config.rb'
|
|
|
|
|
2019-05-02 01:24:30 -04:00
|
|
|
if defined?(Bundler)
|
|
|
|
bundler_groups = [:default]
|
|
|
|
|
|
|
|
if !Rails.env.production?
|
|
|
|
bundler_groups = bundler_groups.concat(Rails.groups(
|
|
|
|
assets: %w(development test profile)
|
|
|
|
))
|
|
|
|
end
|
|
|
|
|
|
|
|
Bundler.require(*bundler_groups)
|
2014-01-14 00:59:55 -05:00
|
|
|
end
|
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
module Discourse
|
|
|
|
class Application < Rails::Application
|
2017-01-09 17:10:14 -05:00
|
|
|
|
2014-05-13 20:20:23 -04:00
|
|
|
def config.database_configuration
|
2014-08-18 02:42:48 -04:00
|
|
|
if Rails.env.production?
|
2014-05-13 20:20:23 -04:00
|
|
|
GlobalSetting.database_config
|
|
|
|
else
|
|
|
|
super
|
|
|
|
end
|
|
|
|
end
|
2013-02-05 14:16:51 -05: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.
|
|
|
|
|
2018-08-07 03:13:20 -04:00
|
|
|
# this pattern is somewhat odd but the reloader gets very
|
|
|
|
# confused here if we load the deps without `lib` it thinks
|
|
|
|
# discourse.rb is under the discourse folder incorrectly
|
|
|
|
require_dependency 'lib/discourse'
|
|
|
|
require_dependency 'lib/js_locale_helper'
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2018-11-08 00:12:18 -05:00
|
|
|
# tiny file needed by site settings
|
2018-08-07 03:13:20 -04:00
|
|
|
require_dependency 'lib/highlight_js/highlight_js'
|
2015-03-13 01:15:13 -04:00
|
|
|
|
2020-05-07 20:44:51 -04:00
|
|
|
# we skip it cause we configure it in the initializer
|
2021-05-20 21:43:47 -04:00
|
|
|
# the railtie for message_bus would insert it in the
|
2020-05-07 20:44:51 -04:00
|
|
|
# wrong position
|
|
|
|
config.skip_message_bus_middleware = true
|
|
|
|
config.skip_multisite_middleware = true
|
2020-06-04 21:05:19 -04:00
|
|
|
config.skip_rails_failover_active_record_middleware = true
|
2020-05-07 20:44:51 -04:00
|
|
|
|
2021-09-10 15:19:52 -04:00
|
|
|
config.multisite_config_path = File.absolute_path(GlobalSetting.multisite_config_path, Rails.root)
|
|
|
|
|
2015-05-28 23:22:50 -04: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
|
|
|
|
|
2019-10-02 00:01:53 -04:00
|
|
|
config.autoloader = :zeitwerk
|
2019-09-11 20:41:50 -04:00
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
# Custom directories with classes and modules you want to be autoloadable.
|
2019-10-02 00:01:53 -04:00
|
|
|
config.autoload_paths += Dir["#{config.root}/app"]
|
|
|
|
config.autoload_paths += Dir["#{config.root}/app/jobs"]
|
2013-05-23 00:52:12 -04:00
|
|
|
config.autoload_paths += Dir["#{config.root}/app/serializers"]
|
2019-10-02 19:54:36 -04:00
|
|
|
config.autoload_paths += Dir["#{config.root}/lib"]
|
2019-10-02 00:01:53 -04:00
|
|
|
config.autoload_paths += Dir["#{config.root}/lib/common_passwords"]
|
|
|
|
config.autoload_paths += Dir["#{config.root}/lib/highlight_js"]
|
|
|
|
config.autoload_paths += Dir["#{config.root}/lib/i18n"]
|
2013-05-23 00:52:12 -04:00
|
|
|
config.autoload_paths += Dir["#{config.root}/lib/validators/"]
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2019-10-02 00:01:53 -04:00
|
|
|
Rails.autoloaders.main.ignore(Dir["#{config.root}/app/models/reports"])
|
2021-03-15 18:47:57 -04:00
|
|
|
Rails.autoloaders.main.ignore(Dir["#{config.root}/lib/freedom_patches"])
|
2019-10-02 00:01:53 -04:00
|
|
|
|
2021-04-29 10:40:55 -04:00
|
|
|
def watchable_args
|
|
|
|
files, dirs = super
|
|
|
|
|
|
|
|
# Skip the assets directory. It doesn't contain any .rb files, so watching it
|
|
|
|
# is just slowing things down and raising warnings about node_modules symlinks
|
|
|
|
app_file_extensions = dirs.delete("#{config.root}/app")
|
|
|
|
Dir["#{config.root}/app/*"].reject { |path| path.end_with? "/assets" }.each do |path|
|
|
|
|
dirs[path] = app_file_extensions
|
|
|
|
end
|
|
|
|
|
|
|
|
[files, dirs]
|
|
|
|
end
|
|
|
|
|
2013-02-05 14:16:51 -05: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 10:27:47 -04:00
|
|
|
config.assets.paths += %W(#{config.root}/config/locales #{config.root}/public/javascripts)
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2021-05-20 21:43:47 -04:00
|
|
|
# Allows us to skip minification on some files
|
2015-02-20 15:48:45 -05:00
|
|
|
config.assets.skip_minification = []
|
|
|
|
|
2013-11-06 06:39:08 -05: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 10:52:52 -04:00
|
|
|
config.assets.precompile += %w{
|
2017-11-28 02:38:58 -05:00
|
|
|
vendor.js
|
|
|
|
admin.js
|
2020-04-08 13:24:18 -04:00
|
|
|
browser-detect.js
|
2017-11-28 02:38:58 -05:00
|
|
|
browser-update.js
|
|
|
|
break_string.js
|
|
|
|
ember_jquery.js
|
|
|
|
pretty-text-bundle.js
|
|
|
|
wizard-application.js
|
|
|
|
wizard-vendor.js
|
|
|
|
markdown-it-bundle.js
|
|
|
|
service-worker.js
|
2018-09-10 02:10:20 -04:00
|
|
|
google-tag-manager.js
|
2020-11-06 15:15:36 -05:00
|
|
|
google-universal-analytics-v3.js
|
|
|
|
google-universal-analytics-v4.js
|
2020-05-29 14:37:02 -04:00
|
|
|
start-discourse.js
|
2018-10-25 09:52:01 -04:00
|
|
|
print-page.js
|
|
|
|
omniauth-complete.js
|
|
|
|
activate-account.js
|
|
|
|
auto-redirect.js
|
|
|
|
wizard-start.js
|
2019-10-01 22:08:41 -04:00
|
|
|
locales/i18n.js
|
|
|
|
discourse/app/lib/webauthn.js
|
2020-01-15 05:27:12 -05:00
|
|
|
confirm-new-email/confirm-new-email.js
|
2020-03-11 09:43:55 -04:00
|
|
|
confirm-new-email/bootstrap.js
|
2018-11-15 13:35:38 -05:00
|
|
|
onpopstate-handler.js
|
2018-11-22 10:02:58 -05:00
|
|
|
embed-application.js
|
2021-06-08 15:03:59 -04:00
|
|
|
discourse/tests/theme_qunit_ember_jquery.js
|
2021-04-30 06:28:33 -04:00
|
|
|
discourse/tests/theme_qunit_vendor.js
|
2021-06-08 15:03:59 -04:00
|
|
|
discourse/tests/theme_qunit_tests_vendor.js
|
|
|
|
discourse/tests/theme_qunit_helper.js
|
2021-04-28 16:12:08 -04:00
|
|
|
discourse/tests/test_starter.js
|
2017-11-28 02:38:58 -05:00
|
|
|
}
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2013-02-28 14:31:39 -05:00
|
|
|
# Precompile all available locales
|
2018-06-22 09:46:07 -04:00
|
|
|
unless GlobalSetting.try(:omit_base_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]}"
|
|
|
|
end
|
2013-02-28 14:31:39 -05:00
|
|
|
end
|
|
|
|
|
2017-04-14 15:53:05 -04: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)
|
2020-04-30 16:41:02 -04:00
|
|
|
|
|
|
|
# We don't want application from node_modules, only from the root
|
|
|
|
app.config.assets.precompile.delete(/(?:\/|\\|\A)application\.(css|js)$/)
|
|
|
|
app.config.assets.precompile += ['application.js']
|
|
|
|
|
2017-04-14 15:53:05 -04:00
|
|
|
start_path = ::Rails.root.join("app/assets").to_s
|
2021-05-05 09:02:48 -04:00
|
|
|
exclude = ['.es6', '.hbs', '.hbr', '.js', '.css', '.lock', '.json', '.log', '.html', '']
|
2017-04-14 15:53:05 -04:00
|
|
|
app.config.assets.precompile << lambda do |logical_path, filename|
|
|
|
|
filename.start_with?(start_path) &&
|
2021-05-05 09:02:48 -04:00
|
|
|
!filename.include?("/node_modules/") &&
|
|
|
|
!filename.include?("/dist/") &&
|
2017-04-14 15:53:05 -04:00
|
|
|
!exclude.include?(File.extname(logical_path))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-02-05 14:16:51 -05: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 11:31:09 -04:00
|
|
|
config.time_zone = 'UTC'
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2015-04-09 11:04:14 -04: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-05 14:16:51 -05:00
|
|
|
|
|
|
|
# Configure the default encoding used in templates for Ruby 1.9.
|
2013-02-18 01:34:43 -05:00
|
|
|
config.encoding = 'utf-8'
|
2013-02-05 14:16:51 -05:00
|
|
|
|
|
|
|
# Configure sensitive parameters which will be filtered from the log file.
|
2014-01-06 07:03:53 -05:00
|
|
|
config.filter_parameters += [
|
2018-02-20 01:44:51 -05:00
|
|
|
:password,
|
|
|
|
:pop3_polling_password,
|
|
|
|
:api_key,
|
|
|
|
:s3_secret_access_key,
|
|
|
|
:twitter_consumer_secret,
|
|
|
|
:facebook_app_secret,
|
|
|
|
:github_client_secret,
|
|
|
|
:second_factor_token,
|
2014-01-06 07:03:53 -05:00
|
|
|
]
|
2013-02-05 14:16:51 -05: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'
|
|
|
|
|
2013-02-25 11:42:20 -05:00
|
|
|
# see: http://stackoverflow.com/questions/11894180/how-does-one-correctly-add-custom-sql-dml-in-migrations/11894420#11894420
|
2013-02-05 14:16:51 -05:00
|
|
|
config.active_record.schema_format = :sql
|
|
|
|
|
2021-04-30 05:54:49 -04:00
|
|
|
# We use this in development-mode only (see development.rb)
|
|
|
|
config.active_record.use_schema_cache_dump = false
|
|
|
|
|
2013-02-25 11:42:20 -05:00
|
|
|
# per https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet
|
2013-02-05 14:16:51 -05:00
|
|
|
config.pbkdf2_iterations = 64000
|
2013-07-22 21:36:01 -04:00
|
|
|
config.pbkdf2_algorithm = "sha256"
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2013-10-09 23:16:09 -04: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
|
|
|
|
|
2018-01-18 16:26:18 -05:00
|
|
|
# wrong place in middleware stack AND request tracker handles it
|
|
|
|
config.middleware.delete Rack::Runtime
|
|
|
|
|
2014-07-10 01:18:31 -04: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
|
|
|
|
|
2020-01-07 07:22:58 -05:00
|
|
|
if !(Rails.env.development? || ENV['SKIP_ENFORCE_HOSTNAME'] == "1")
|
2018-11-19 22:34:02 -05:00
|
|
|
require 'middleware/enforce_hostname'
|
|
|
|
config.middleware.insert_after Rack::MethodOverride, Middleware::EnforceHostname
|
|
|
|
end
|
2018-11-14 23:22:02 -05:00
|
|
|
|
2018-11-30 09:51:45 -05:00
|
|
|
require 'content_security_policy/middleware'
|
2018-10-22 13:22:23 -04:00
|
|
|
config.middleware.swap ActionDispatch::ContentSecurityPolicy::Middleware, ContentSecurityPolicy::Middleware
|
|
|
|
|
2018-01-11 22:15:10 -05:00
|
|
|
require 'middleware/discourse_public_exceptions'
|
|
|
|
config.exceptions_app = Middleware::DiscoursePublicExceptions.new(Rails.public_path)
|
2013-02-05 14:16:51 -05:00
|
|
|
|
|
|
|
# Our templates shouldn't start with 'discourse/app/templates'
|
2020-05-15 16:07:35 -04:00
|
|
|
config.handlebars.templates_root = {
|
|
|
|
'discourse/app/templates' => '',
|
2020-05-23 00:56:13 -04:00
|
|
|
'admin/addon/templates' => 'admin/templates/',
|
|
|
|
'select-kit/addon/templates' => 'select-kit/templates/'
|
2020-05-15 16:07:35 -04:00
|
|
|
}
|
|
|
|
|
2020-05-05 12:15:03 -04:00
|
|
|
config.handlebars.raw_template_namespace = "__DISCOURSE_RAW_TEMPLATES"
|
2020-02-11 14:38:12 -05:00
|
|
|
Sprockets.register_mime_type 'text/x-handlebars', extensions: ['.hbr']
|
|
|
|
Sprockets.register_transformer 'text/x-handlebars', 'application/javascript', Ember::Handlebars::Template
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2020-03-11 09:43:55 -04:00
|
|
|
require 'discourse_js_processor'
|
|
|
|
|
|
|
|
Sprockets.register_mime_type 'application/javascript', extensions: ['.js', '.es6', '.js.es6'], charset: :unicode
|
|
|
|
Sprockets.register_postprocessor 'application/javascript', DiscourseJsProcessor
|
|
|
|
|
2013-03-11 08:33:20 -04:00
|
|
|
require 'discourse_redis'
|
2014-05-06 18:23:52 -04:00
|
|
|
require 'logster/redis_store'
|
2013-02-05 14:16:51 -05:00
|
|
|
# Use redis for our cache
|
2013-03-11 08:33:20 -04:00
|
|
|
config.cache_store = DiscourseRedis.new_redis_store
|
2019-12-03 04:05:53 -05:00
|
|
|
$redis = DiscourseRedis.new # rubocop:disable Style/GlobalVars
|
2014-05-07 16:52:47 -04:00
|
|
|
Logster.store = Logster::RedisStore.new(DiscourseRedis.new)
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2013-04-11 02:24:08 -04:00
|
|
|
# we configure rack cache on demand in an initializer
|
|
|
|
# our setup does not use rack cache and instead defers to nginx
|
2013-02-05 14:16:51 -05:00
|
|
|
config.action_dispatch.rack_cache = nil
|
|
|
|
|
2021-05-20 21:43:47 -04:00
|
|
|
# ember stuff only used for asset precompilation, production variant plays up
|
2013-04-11 02:24:08 -04:00
|
|
|
config.ember.variant = :development
|
2013-09-16 14:08:55 -04: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 02:24:08 -04:00
|
|
|
|
2013-08-25 22:52:36 -04:00
|
|
|
require 'auth'
|
2013-08-01 01:59:57 -04:00
|
|
|
|
2018-01-15 15:42:31 -05:00
|
|
|
if GlobalSetting.relative_url_root.present?
|
|
|
|
config.relative_url_root = GlobalSetting.relative_url_root
|
|
|
|
end
|
|
|
|
|
2018-01-14 20:43:07 -05:00
|
|
|
if Rails.env == "test"
|
|
|
|
if ENV['LOAD_PLUGINS'] == "1"
|
|
|
|
Discourse.activate_plugins!
|
|
|
|
end
|
|
|
|
else
|
2019-10-06 14:47:33 -04:00
|
|
|
plugin_initialization_guard do
|
|
|
|
Discourse.activate_plugins!
|
|
|
|
end
|
2015-03-08 20:45:36 -04:00
|
|
|
end
|
|
|
|
|
2019-07-15 10:52:54 -04:00
|
|
|
Discourse.find_plugin_js_assets(include_disabled: true).each do |file|
|
|
|
|
config.assets.precompile << "#{file}.js"
|
|
|
|
end
|
|
|
|
|
2020-08-31 06:14:09 -04:00
|
|
|
# Use discourse-fonts gem to symlink fonts and generate .scss file
|
|
|
|
fonts_path = File.join(config.root, 'public/fonts')
|
|
|
|
Discourse::Utils.atomic_ln_s(DiscourseFonts.path_for_fonts, fonts_path)
|
|
|
|
|
2017-04-12 10:52:52 -04:00
|
|
|
require_dependency 'stylesheet/manager'
|
2018-11-26 16:49:57 -05:00
|
|
|
require_dependency 'svg_sprite/svg_sprite'
|
2017-04-12 10:52:52 -04:00
|
|
|
|
2013-02-25 11:42:20 -05:00
|
|
|
config.after_initialize do
|
2016-12-21 21:13:14 -05: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'
|
2017-08-11 22:22:22 -04:00
|
|
|
require_dependency 'topic_view'
|
|
|
|
require_dependency 'topic_list'
|
2016-12-21 21:13:14 -05:00
|
|
|
require_dependency 'group'
|
|
|
|
require_dependency 'user_field'
|
|
|
|
require_dependency 'post_action_type'
|
2017-03-16 02:44:09 -04:00
|
|
|
# Ensure that Discourse event triggers for web hooks are loaded
|
|
|
|
require_dependency 'web_hook'
|
2016-12-21 21:13:14 -05:00
|
|
|
|
2017-08-11 22:22:22 -04:00
|
|
|
# Load plugins
|
2019-10-06 14:47:33 -04:00
|
|
|
plugin_initialization_guard do
|
|
|
|
Discourse.plugins.each(&:notify_after_initialize)
|
|
|
|
end
|
2017-07-27 12:08:10 -04:00
|
|
|
|
2017-10-29 23:24:15 -04:00
|
|
|
# we got to clear the pool in case plugins connect
|
|
|
|
ActiveRecord::Base.connection_handler.clear_active_connections!
|
|
|
|
|
2017-07-27 12:08:10 -04: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] ||
|
2020-04-27 13:28:10 -04:00
|
|
|
%w{qunit.js
|
|
|
|
qunit.css
|
|
|
|
test_helper.css
|
|
|
|
discourse/tests/test_helper.js
|
|
|
|
wizard/test/test_helper.js
|
|
|
|
}.include?(logical_path) ||
|
|
|
|
logical_path =~ /\/node_modules/ ||
|
|
|
|
logical_path =~ /\/dist/
|
2017-07-27 12:08:10 -04:00
|
|
|
end
|
|
|
|
end
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
2013-09-15 22:58:26 -04:00
|
|
|
|
2013-11-19 18:10:12 -05:00
|
|
|
if ENV['RBTRACE'] == "1"
|
|
|
|
require 'rbtrace'
|
|
|
|
end
|
|
|
|
|
2016-12-07 22:49:39 -05:00
|
|
|
config.generators do |g|
|
|
|
|
g.test_framework :rspec, fixture: false
|
|
|
|
end
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
end
|