2012-09-04 50 views
2

如何配置Sinatra以使用自定义的SCSS目录? 我尝试了以下解决方案,但这对我无效。Sinatra SASS自定义目录

class SassEngine < Sinatra::Base 

set :views, File.dirname(__FILE__) + '/sass' 

get '/sass/*.scss' do 
    filename = params[:splat].first 
    sass filename.to_sym 
end 

end 

回答

4

实际上官方文档有一个完全针对这个用例的章节。

为了让这里更容易是代码(从文档拍摄):

set :views, :sass => 'views/sass', :haml => 'templates', :default => 'views' 

helpers do 
    def find_template(views, name, engine, &block) 
    _, folder = views.detect { |k,v| engine == Tilt[k] } 
    folder ||= views[:default] 
    super(folder, name, engine, &block) 
    end 
end 

此配置之后,你只想做:

get '/css/a_css_file.css' do 
    sass :a_css_file 
end 

或更普遍的方法:

get '/css/*.css' do 
    file = params[:splat].first 
    sass file.to_sym 
end 

虽然最后一个不是一个好方法,但如果 调用不存在的文件,它将导致错误。

+0

谢谢,所以,我应该在哪里放置.css文件?放入我的应用程序根目录中的css文件夹? –

+0

你的意思是你的sass文件?无论你在'set:views'调用中定义了什么。通常我会建议'app_root/views/sass'(这是上面代码中提供的) – robustus

0

我找到了解决方案。

require 'sinatra' 
require 'dm-core' 
require 'dm-migrations' 
require 'haml' 
require 'sass' 
require 'shotgun' 


set :views, :scss => 'views/', :haml => 'template', :default => 'views' 

helpers do 
    def find_template(views, name, engine, &block) 
    _, folder = views.detect { |k,v| engine == Tilt[k] } 
    folder ||= views[:default] 
    super(folder, name, engine, &block) 
    end 
end 


get '/css/:name.css' do 
    scss :styles 
end 


get '/' do 
    haml :index 
end 

因此,大家可以看到,而不是:

get '/css/styles.css' do 
    sass :styles 
end 

它应该是:

get '/css/:name.css' do 
    scss :styles 
end 

然后我把我的styles.scss到我的/ views文件夹。但是,您可以通过编辑:scss =>路径到您的.scss文件来修改目标目录:

set :views, :scss => 'views/', :haml => 'template', :default => 'views'