Skip to content

Commit

Permalink
Fix asset precompile for productization
Browse files Browse the repository at this point in the history
  • Loading branch information
simaishi committed Mar 3, 2016
1 parent d7d0a86 commit bde5334
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 97 deletions.
4 changes: 4 additions & 0 deletions config/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,10 @@ class Application < Rails::Application
config.logger = Vmdb.rails_logger
config.colorize_logging = false

initializer :prepare_productization, :after => :append_asset_paths do
Vmdb::Productization.new.prepare
end

config.before_initialize do
require_relative 'environments/patches/database_configuration'

Expand Down
1 change: 0 additions & 1 deletion config/initializers/productization.rb

This file was deleted.

44 changes: 8 additions & 36 deletions lib/vmdb/productization.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ class Productization
def prepare
prepare_asset_paths
prepare_asset_precompilation
prepare_asset_directive_processor
add_logging_to_rake_assets_precompile
end

private
Expand All @@ -16,42 +14,16 @@ def prepare_asset_paths
Rails.application.config.assets.paths.unshift(*paths)
end

def prepare_asset_precompilation
Rails.application.config.assets.precompile += %w(productization.css productization.js)
end

# Replace the default Sprockets::DirectiveProcessor with our overriden one
# that properly handles overriding the asset paths.
def prepare_asset_directive_processor
replace_directive_processor('text/css')
replace_directive_processor('application/javascript')
# sprockets-rails is very strict about the path to assets being in Rails.root.join("app/assets")
# so we must duplicate it with our new paths.
LOOSE_APP_ASSETS = lambda do |logical_path, filename|
filename.start_with?(::Rails.root.join("productization/assets").to_s) &&
!['.js', '.css', ''].include?(File.extname(logical_path))
end

def replace_directive_processor(type)
if Rails.application.assets.respond_to?(:register_processor)
Rails.application.assets.unregister_processor(type, Sprockets::DirectiveProcessor)
Rails.application.assets.register_processor(type, DirectiveProcessor)
end
end

# Override Rails' rake task component for precompilation to log separators on
# each call. The method is defined at the top-level and so must be overridden
# in the TOPLEVEL_BINDING.
#
# The original source is located at:
# https://github.com/rails/rails/blob/v3.2.15/actionpack/lib/sprockets/assets.rake#L33-L57
def add_logging_to_rake_assets_precompile
TOPLEVEL_BINDING.eval <<-EORUBY
if defined?(internal_precompile)
def internal_precompile_with_logging(digest=nil)
puts "== precompile with\#{"out" if digest == false} digests ================================================="
internal_precompile_without_logging(digest)
end
# a la alias_method_chain
alias :internal_precompile_without_logging :internal_precompile
alias :internal_precompile :internal_precompile_with_logging
end
EORUBY
def prepare_asset_precompilation
Rails.application.config.assets.precompile += [LOOSE_APP_ASSETS]
Rails.application.config.assets.precompile += %w(productization.css productization.js)
end
end
end
60 changes: 0 additions & 60 deletions lib/vmdb/productization/directive_processor.rb

This file was deleted.

0 comments on commit bde5334

Please sign in to comment.