2010-05-28 62 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