4

デフォルトの「views」ディレクトリから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") }しかし、私のためにこれを設定する線に沿って何かがあるに違いありませんか?

4

5 に答える 5

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
于 2012-11-05T23:40:17.890 に答える
1

Sinatraは現在、単一のビューディレクトリのみを受け入れるため、現時点ではそのような方法はありません。

sinatra-compassを使用set :compass, :sass_dir => 'assets'して、ビューフォルダーに1つの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'
于 2010-05-30T15:49:27.573 に答える
1

この記事をご覧になることをお勧めします。http://railscoder.com/setting-up-sinatra-to-use-slim-sass-and-coffeescript/

多数のサイトに出くわした後、この記事では「views」ディレクトリではなく、別のディレクトリにsassファイルを配置することができました。

于 2012-10-28T01:36:57.377 に答える
0

現在、これを自分でテストすることはできませんが、次のことを試してみましたか。

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

編集Sassリファレンスも役立つかもしれません。

于 2010-05-28T08:13:07.937 に答える
0

viewsそのままにしておきたいものが他にもあると思うので、これはおそらく役に立たないでしょうが、viewsディレクトリを変更することもできます...

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

次に、次のことができます。

get '/stylesheet.css' do
    sass :'sass/core'
end
于 2010-05-30T11:39:04.623 に答える