2010-05-28 44 views
4

而不是从默认的“若干意见”目录服务我的Sass文件指定自定义萨斯目录我想改变这/assets/sass如何与西纳特拉

下尝试在我的主要红宝石根文件中的应用:

尝试1:

set :sass, Proc.new { File.join(root, "assets/sass") } 

get '/stylesheet.css' do 
    sass :core 
end 

有了这个,我得到以下错误:

myapp.rb:17 NoMethodError: undefined method `merge' for "/Users/x/x/x/mysinatraapp/assets/sass":String 

尝试2:

get '/stylesheet.css' do 
    sass :'/assets/sass/core' 
end 

尝试3:

get '/stylesheet.css' do 
    sass :'/assets/sass/core' 
end 

都返回以下错误:

Errno::ENOENT: No such file or directory - ./views/assets/sass/core.sass 

尝试4:

get '/stylesheet.css' do 
    sass :'../assets/sass/core' 
end 

这工作!然而,一定有什么东西沿着set :sass, Proc.new { File.join(root, "assets/sass") }这条线为我设置?

回答

1

目前没有这样的方式,因为Sinatra目前只接受一个单一的视图目录。

你可以尝试使用sinatra-compassset :compass, :sass_dir => 'assets',只有放在您的视图文件夹中的单个SASS文件,这将只是@import stylesheet.sass或者你可以覆盖#sass

helpers do 
    def sass(template, *args) 
    template = :"#{settings.sass_dir}/#{template}" if template.is_a? Symbol 
    super(template, *args) 
    end 
end 

set :sass_dir, '../assets' 
+0

这个答案看起来不错,但我似乎无法得到它的滚动 - 任何想法我哪里错了? - http://pastie.org/986956 - 非常感谢 – 2010-06-01 09:05:00

+0

您使用'settings.sass_dir'但是'set:sass,...'。你应该'set:sass_dir,...'('sass'可能被sinatra使用,并且希望是一个散列,所以你应该避免使用这个名字)。 – 2010-06-03 09:47:11

+0

@KonstantinHaase这仍然是最好的/唯一的方法来做到这一点?我正在寻找一种基于客户端是否为移动设备来呈现移动布局的(良好)方法。我希望有一种方法可以根据每个路线更改视图文件夹,就像默认布局一样。 – 2012-11-01 06:13:41

0

我目前不能测试这个我自己,但你有没有尝试过以下内容。

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

编辑The Sass reference可能会有所帮助。

+0

我已经采取一看裁判萨斯在感谢,您的代码段给了我同样的错误在尝试1干杯 – 2010-05-28 16:39:02

0

这可能没有帮助,因为我猜你必须要留在原地views下其他的东西,但你可以改变views目录,以及...

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

,那么你可以做:

get '/stylesheet.css' do 
    sass :'sass/core' 
end 
3

设置您的模板目录,然后手动渲染Sass :: Engine。

require 'sinatra' 
require 'sass' 

SASS_DIR = File.expand_path("../stylesheets", __FILE__) 

get "/" do 
    erb :index 
end 

get "/stylesheets/:stylesheet.css" do |stylesheet| 
    content_type "text/css" 
    template = File.read(File.join(SASS_DIR, "#{stylesheet}.sass")) 
    Sass::Engine.new(template).render 
end