Browse Source

Maintenance: Load asset processing gems only at build time.

Martin Gruner 3 years ago
parent
commit
3fae5a027f
3 changed files with 25 additions and 14 deletions
  1. 16 13
      Gemfile
  2. 1 1
      app/controllers/application_controller/handles_errors.rb
  3. 8 0
      config/application.rb

+ 16 - 13
Gemfile

@@ -47,24 +47,27 @@ gem 'rszr', '0.5.2'
 # performance - Memcached
 gem 'dalli', require: false
 
-# asset handling - coffee-script
-gem 'coffee-rails'
-gem 'coffee-script-source'
+# Only load gems for asset compilation if they are needed to avoid
+#   having unneeded runtime dependencies like NodeJS.
+group :assets do
+  # asset handling - javascript execution for e.g. linux
+  gem 'execjs', require: false
 
-# asset handling - frontend templating
-gem 'eco'
+  # asset handling - coffee-script
+  gem 'coffee-rails', require: false
 
-# asset handling - SASS
-gem 'sassc-rails'
+  # asset handling - frontend templating
+  gem 'eco', require: false
 
-# asset handling - pipeline
-gem 'sprockets', '~> 3.7.2'
-gem 'uglifier'
+  # asset handling - SASS
+  gem 'sassc-rails', require: false
 
-gem 'autoprefixer-rails'
+  # asset handling - pipeline
+  gem 'sprockets', '~> 3.7.2', require: false
+  gem 'uglifier', require: false
 
-# asset handling - javascript execution for e.g. linux
-gem 'execjs'
+  gem 'autoprefixer-rails', require: false
+end
 
 # Don't use mini_racer any more for asset compilation.
 #   Instead, use an external node.js binary.

+ 1 - 1
app/controllers/application_controller/handles_errors.rb

@@ -5,7 +5,7 @@ module ApplicationController::HandlesErrors
 
   included do
     rescue_from StandardError, with: :internal_server_error
-    rescue_from ExecJS::RuntimeError, with: :internal_server_error
+    rescue_from 'ExecJS::RuntimeError', with: :internal_server_error
     rescue_from ActiveRecord::RecordNotFound, with: :not_found
     rescue_from ActiveRecord::StatementInvalid, with: :unprocessable_entity
     rescue_from ActiveRecord::RecordInvalid, with: :unprocessable_entity

+ 8 - 0
config/application.rb

@@ -12,6 +12,14 @@ Bundler.setup
 # you've limited to :test, :development, or :production.
 Bundler.require(*Rails.groups)
 
+# Only load gems for asset compilation if they are needed to avoid
+#   having unneeded runtime dependencies like NodeJS.
+if ARGV.include?('assets:precompile') || Rails.groups.exclude?('production')
+  Bundler.load.current_dependencies.select do |dep|
+    require dep.name if dep.groups.include?(:assets)
+  end
+end
+
 module Zammad
   class Application < Rails::Application
     # Initialize configuration defaults for originally generated Rails version.