2013-02-05 14:16:51 -05:00
require File . expand_path ( '../boot' , __FILE__ )
require 'rails/all'
# Plugin related stuff
2014-07-22 19:02:22 -04:00
require_relative '../lib/discourse_event'
require_relative '../lib/discourse_plugin'
2013-05-01 14:10:51 -07:00
require_relative '../lib/discourse_plugin_registry'
2013-02-05 14:16:51 -05:00
2013-12-20 16:17:21 +11:00
# Global config
require_relative '../app/models/global_setting'
2014-08-18 12:12:48 +05:30
require 'pry-rails' if Rails . env . development?
2014-05-26 19:46:57 +10:00
2013-02-05 14:16:51 -05:00
if defined? ( Bundler )
2013-03-23 20:32:59 +05:30
Bundler . require ( * Rails . groups ( assets : %w( development test profile ) ) )
2014-01-14 16:59:55 +11:00
end
2013-02-05 14:16:51 -05:00
module Discourse
class Application < Rails :: Application
2014-05-14 10:20:23 +10:00
def config . database_configuration
2014-08-18 12:12:48 +05:30
if Rails . env . production?
2014-05-14 10:20:23 +10: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.
require 'discourse'
2014-05-05 18:04:09 -04:00
require 'es6_module_transpiler/rails'
2013-05-30 15:53:40 +10:00
require 'js_locale_helper'
2013-02-05 14:16:51 -05:00
2015-03-13 16:15:13 +11:00
# tiny file needed by site settings
require 'highlight_js/highlight_js'
2013-05-14 15:20:28 +10: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 13:22:50 +10: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-05 14:16:51 -05:00
# Custom directories with classes and modules you want to be autoloadable.
2013-05-22 21:52:12 -07:00
config . autoload_paths += Dir [ " #{ config . root } /app/serializers " ]
config . autoload_paths += Dir [ " #{ config . root } /lib/validators/ " ]
2013-10-01 17:04:02 +10:00
config . autoload_paths += Dir [ " #{ config . root } /app " ]
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 16:27:47 +02:00
config . assets . paths += %W( #{ config . root } /config/locales #{ config . root } /public/javascripts )
2013-02-05 14:16:51 -05:00
2015-02-20 15:48:45 -05:00
# Allows us to skip minifincation on some files
config . assets . skip_minification = [ ]
2013-11-06 22:39:08 +11: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 ]
2015-11-25 15:45:36 +11:00
config . assets . precompile += [ 'vendor.js' , 'common.css' , 'desktop.css' , 'mobile.css' ,
2016-07-04 14:15:51 -04:00
'admin.js' , 'admin.css' , 'shiny/shiny.css' , 'preload-store.js.es6' ,
2016-06-14 14:31:51 -04:00
'browser-update.js' , 'embed.css' , 'break_string.js' , 'ember_jquery.js' ,
'pretty-text-bundle.js' ]
2013-02-05 14:16:51 -05:00
2013-02-28 14:31:39 -05:00
# Precompile all available locales
2013-04-29 16:52:56 +10: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-02-28 14:31:39 -05:00
end
2013-02-05 14:16:51 -05:00
# Activate observers that should always be running.
config . active_record . observers = [
:user_email_observer ,
2013-02-25 19:42:20 +03:00
:user_action_observer ,
2013-02-05 14:16:51 -05: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.
2014-10-27 11:31:09 -04:00
config . time_zone = 'UTC'
2013-02-05 14:16:51 -05:00
2015-04-09 17:04:14 +02: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 17:34:43 +11: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 13:03:53 +01:00
config . filter_parameters += [
:password ,
2014-08-26 16:52:35 -07:00
:pop3_polling_password ,
2014-01-06 13:03:53 +01:00
:s3_secret_access_key ,
:twitter_consumer_secret ,
:facebook_app_secret ,
2014-07-16 12:25:24 -04:00
:github_client_secret
2014-01-06 13:03:53 +01: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'
# We need to be able to spin threads
config . active_record . thread_safe!
2013-02-25 19:42:20 +03: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
2015-09-23 15:24:30 +10:00
config . active_record . raise_in_transactional_callbacks = true
2014-10-15 00:04:47 -07:00
2013-02-25 19:42:20 +03: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-10 14:16:09 +11: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 15:18:31 +10: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-05 14:16:51 -05: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-04-18 10:47:52 +08:00
config . handlebars . raw_template_namespace = " Ember.TEMPLATES "
2013-02-05 14:16:51 -05:00
2013-03-11 05:33:20 -07:00
require 'discourse_redis'
2014-05-07 08:23:52 +10:00
require 'logster/redis_store'
2016-03-11 17:25:24 +08:00
require 'freedom_patches/redis'
2013-02-05 14:16:51 -05:00
# Use redis for our cache
2013-03-11 05:33:20 -07:00
config . cache_store = DiscourseRedis . new_redis_store
2014-05-07 08:23:52 +10:00
$redis = DiscourseRedis . new
2014-05-08 06:52:47 +10:00
Logster . store = Logster :: RedisStore . new ( DiscourseRedis . new )
2013-02-05 14:16:51 -05:00
2013-04-11 16:24:08 +10: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
2013-04-11 16:24:08 +10:00
# ember stuff only used for asset precompliation, production variant plays up
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 16:24:08 +10:00
2013-08-26 12:52:36 +10:00
require 'auth'
2014-02-05 10:50:28 +05:30
Discourse . activate_plugins! unless Rails . env . test? and ENV [ 'LOAD_PLUGINS' ] != " 1 "
2013-08-01 15:59:57 +10:00
2015-03-09 11:45:36 +11:00
if GlobalSetting . relative_url_root . present?
config . relative_url_root = GlobalSetting . relative_url_root
end
2013-02-25 19:42:20 +03:00
config . after_initialize do
2013-09-17 10:23:21 +10:00
# So open id logs somewhere sane
2013-02-05 14:16:51 -05:00
OpenID :: Util . logger = Rails . logger
2013-09-17 10:23:21 +10:00
if plugins = Discourse . plugins
plugins . each { | plugin | plugin . notify_after_initialize }
end
2013-02-05 14:16:51 -05:00
end
2013-09-16 12:58:26 +10:00
2013-11-20 10:10:12 +11:00
if ENV [ 'RBTRACE' ] == " 1 "
require 'rbtrace'
end
2013-02-05 14:16:51 -05:00
end
end
2014-12-22 15:59:07 +01:00
if defined? ( PhusionPassenger )
PhusionPassenger . on_event ( :starting_worker_process ) do | forked |
if forked
Discourse . after_fork
end
end
end