在访问Sinatra时未编译的链轮资产

时间:2017-11-27 02:42:26

标签: ruby sinatra sprockets

我遇到的问题是生成的资产路径没有指向任何内容 - 我的项目目录没有更改/ sprockets没有构建/压缩js。

在我的erb中:

  <%= javascript_tag 'app' %>

在我的app.rb(主sinatra文件)

  register AssetPipeline

在asset_pipeline.rb

require 'sprockets-helpers'

module AssetPipeline
  module_function

  def registered(app)
    app.set :assets, assets = Sprockets::Environment.new(app.settings.root)
    app.set :assets_path, -> { File.join(public_folder, "assets") }
    app.set :assets_precompile, %w(app.js)

    assets.append_path('assets/javascripts')

    app.configure :development do
      assets.cache = Sprockets::Cache::FileStore.new('./tmp')

      app.get '/assets/*' do
        env['PATH_INFO'].sub!(%r{^/assets}, '')
        settings.assets.call(env)
      end
    end

    app.configure :production do
      Sprockets.register_compressor 'application/javascript', :uglify, Sprockets::UglifierCompressor
      Sprockets.js_compressor = :uglify
    end

    Sprockets::Helpers.configure do |config|
      config.environment = assets
      config.prefix      = '/assets'
      config.debug       = true if app.development?
      if app.production?
        config.digest      = true
        config.manifest    = Sprockets::Manifest.new(
          assets,
          File.join(app.assets_path, "manifesto.json")
        )
      end
    end

    app.helpers Sprockets::Helpers
  end
end

我正在使用

运行该应用
RACK_ENV=production puma

正如您在最后一个片段中看到的,我有Uglifier压缩器设置。

我在浏览器中看到的问题是 找不到/assets/app-digesthash.js(并且sinatra / puma日志也显示404)

相关宝石版本:

puma (3.11.0)
sinatra (2.0.0)
sprockets (4.0.0.beta6)
sprockets-helpers (1.2.1)

1 个答案:

答案 0 :(得分:0)

app.get '/assets/*' do似乎是错误的。将它移动到它所在的块之外的顶部(并且在生产配置之后是安全的)并且它应该正常启动,如下所示:

app.configure :development do
    assets.cache = Sprockets::Cache::FileStore.new('./tmp')
end 

app.configure :production do
    Sprockets.register_compressor 'application/javascript', :uglify, Sprockets::UglifierCompressor
    Sprockets.js_compressor = :uglify
end 

app.get '/assets/*' do
    env['PATH_INFO'].sub!(%r{^/assets}, '') 
    settings.assets.call(env)
end