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

Ruby 如何使用Sinatra指定自定义Sass目录,ruby,routing,sinatra,path,sass,Ruby,Routing,Sinatra,Path,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

以下尝试出现在应用程序中我的主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
Errno::ENOENT: No such file or directory - ./views/assets/sass/core.sass
尝试2:

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

get '/stylesheet.css' do
    sass :'/assets/sass/core'
end
两者都返回以下错误:

 myapp.rb:17 NoMethodError: undefined method `merge' for "/Users/x/x/x/mysinatraapp/assets/sass":String
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”)}
的东西为我设置了这项功能?

我目前无法自己测试,但您尝试过以下方法吗

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

编辑:可能也有帮助。

这可能没有帮助,因为我猜您在
视图
下还有其他东西要保留,但是您也可以更改
视图
目录

set :views, File.dirname(__FILE__) + '/assets'
然后你可以做:

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

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

您可以尝试使用和
set:compass,:sass_dir=>“assets”
,只在视图文件夹中放置一个sass文件,这将简单地导入样式表.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'

您可能想看看这篇文章


在接触了许多站点之后,我能够实现将我的sass文件放在不同的目录中,而不是本文中的“视图”目录。

设置模板目录,然后手动呈现sass::引擎

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

我已经查看了Sass ref,谢谢,您的代码片段给我的错误与尝试1中的错误相同。欢呼这个答案看起来很好,但我似乎无法让它运行-有什么想法我哪里出了问题吗非常感谢您使用
settings.sass\u dir
但是
set:sass,
。你应该
set:sass_dir,…
sass
可能被sinatra使用,并且应该是散列,因此你应该避免使用该名称)。@KonstantinHaase这仍然是最好的/唯一的方法吗?我正在寻找一种(好的)基于客户端是否为移动设备呈现移动布局的方法。我希望有一种方法可以在每条管线的基础上更改views文件夹,就像默认布局一样。不,您现在应该覆盖find_模板: