如何在Sinatra应用程序中使用rails-autoprefixer?

时间:2016-04-01 10:57:51

标签: css sinatra autoprefixer

我无法使autoprefixer工作。它被调用,但没有导致我的css代码。

这里有关于Sinatra app的说明 - https://github.com/ai/autoprefixer-rails

application.rb中

class Application < Sinatra::Base
  # Load path and gems/bundler
  $LOAD_PATH << File.expand_path(File.dirname(__FILE__))
  require "bundler"
  Bundler.require
  register Sinatra::AssetPipeline
  assets = Sprockets::Environment.new
  AutoprefixerRails.install(assets)    
  ### other

  # Actual Rails Assets integration, everything else is Sprockets
  if defined?(RailsAssets)
    RailsAssets.load_paths.each do |path|
      settings.sprockets.append_path(path)
    end
  end
end

我查看了宝石源并找到了这样的例子:

@assets = Sprockets::Environment.new
@assets.append_path(@dir.join('app/app/assets/stylesheets'))
AutoprefixerRails.install(@assets, browsers: ['chrome 25'])

@dir = Pathname(__FILE__).dirname
@css = @dir.join('app/app/assets/stylesheets/test.css').read
AutoprefixerRails.process(@css)

1 个答案:

答案 0 :(得分:1)

从外观上看,Sprockets配置不正确。 Sprockets::Enviroment占用了一个块,使用它来路径 资产需要配置。这是我用过的文件夹结构 这个例子:

├── app.rb
├── assets
│   ├── some_more_styles.css
│   └── styles.css
└── views
    └── index.erb

以下是我配置Sprockets环境的方法:

# app.rb
require 'autoprefixer-rails'

assets = Sprockets::Environment.new do |env|
  # This ensures sprockets can find the CSS files
  env.append_path "assets"
end

AutoprefixerRails.install(assets)

让Sprockets与Sinatra合作还有一个步骤。每一个 资产需要手动路由。例如,如果index.erb有 尝试在路径<link>加载文件的/assets/styles.css代码, 如果没有定义,该路由将导致404 Not Found错误 app.rb。要避免使用404,请按以下方式定义路径:

# app.rb
get '/assets/*' do
  # The env["PATH_INFO"] results in the string '/assets/styles.css' in
  # our example. We need to remove the '/assets' part since Sprockets
  # will take care of appending it when invoked on the next line.

  env["PATH_INFO"].sub!("/assets", "")
  assets.call(env)
end

我已将完整代码上传到 https://gist.github.com/kgrz/5caf63f827e5a6181597cefae484a515为你的 参考。这又基于Sinatra Recipes article on Sprockets