如何使用Sinatra指定自定义Sass目录

时间:2010-05-28 00:55:30

标签: ruby routing sinatra path sass

我没有在默认的“views”目录中提供我的Sass文件,而是将其更改为/assets/sass

以下尝试位于应用程序中的主ruby根文件中:

尝试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") }的内容为我设置这个内容吗?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分: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'

答案 2 :(得分:1)

您可能想看看这篇文章。 http://railscoder.com/setting-up-sinatra-to-use-slim-sass-and-coffeescript/

在浏览过多个网站后,我能够将我的sass文件放在不同的目录中,而不是本文中的“views”目录。

答案 3 :(得分:0)

我目前无法自己测试,但您是否尝试过以下操作。

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

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

答案 4 :(得分:0)

这可能没有帮助,因为我猜你在views下有其他你希望保留的东西,但是你也可以更改views目录......

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

然后你可以这样做:

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