Sinatra app with stars not working on Heroku

I have a small Sinatra application, including this module:

module Sprockets module Helpers def asset_path(source) "/assets/#{Environment.instance.find_asset(source).digest_path}" end def sprockets Environment.instance.call(env) end end class << self def precompile dir = 'public/assets' FileUtils.rm_rf(dir, secure: true) ::Sprockets::StaticCompiler.new(Environment.instance, 'public/assets', [/\.(png|jpg)$/, /^(application|ie)\.(css|js)$/]).compile end end class Environment < ::Sprockets::Environment include Singleton def initialize super %w[app lib vendor].each do |dir| %w[images javascripts stylesheets].each do |type| path = File.join(root, dir, 'assets', type) append_path(path) if File.exist?(path) end end js_compressor = Uglifier.new css_compressor = YUI::CssCompressor.new context_class.instance_eval do include Helpers end end end end 

and with the following definition:

 get('/assets/*') do sprockets # Defined in the module above end 

Everything works fine, assets are loaded and displayed on the local machine using pow . But on Heroku, no assets are uploaded, the server simply returns 404 for each asset file.

+6
source share
1 answer

The module is simplified, and now it works! Weird ...

 class Assets < Sprockets::Environment class << self def instance(root = nil) @instance ||= new(root) end end def initialize(root) super %w[app lib vendor].each do |dir| %w[images javascripts stylesheets].each do |type| path = File.join(root, dir, 'assets', type) self.append_path(path) if File.exist?(path) end end self.css_compressor = YUI::CssCompressor.new self.js_compressor = Uglifier.new context_class.instance_eval do include Helpers end end def precompile dir = 'public/assets' FileUtils.rm_rf(dir, secure: true) Sprockets::StaticCompiler.new(self, 'public/assets', ['*']).compile end module Helpers def asset_path(source) "/assets/#{Assets.instance.find_asset(source).digest_path}" end end end 
+4
source

Source: https://habr.com/ru/post/901056/


All Articles