我没有在默认的“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") }
的内容为我设置这个内容吗?
答案 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-compass和set :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)
答案 4 :(得分:0)
这可能没有帮助,因为我猜你在views
下有其他你希望保留的东西,但是你也可以更改views
目录......
set :views, File.dirname(__FILE__) + '/assets'
然后你可以这样做:
get '/stylesheet.css' do
sass :'sass/core'
end