カスタム SCSS ディレクトリを使用するように Sinatra を設定するには? 次の解決策を試しましたが、うまくいきませんでした。
class SassEngine < Sinatra::Base
set :views, File.dirname(__FILE__) + '/sass'
get '/sass/*.scss' do
filename = params[:splat].first
sass filename.to_sym
end
end
実際、公式ドキュメントには、まさにこのユースケースのセクションがあります。
簡単にするために、コードを次に示します(ドキュメントから取得):
set :views, :sass => 'views/sass', :haml => 'templates', :default => 'views'
helpers do
def find_template(views, name, engine, &block)
_, folder = views.detect { |k,v| engine == Tilt[k] }
folder ||= views[:default]
super(folder, name, engine, &block)
end
end
この構成の後、次のようにします。
get '/css/a_css_file.css' do
sass :a_css_file
end
またはより一般的なアプローチ:
get '/css/*.css' do
file = params[:splat].first
sass file.to_sym
end
最後の方法は適切な方法ではありませんが、存在しないファイルに対して呼び出すとエラーが発生します。
解決策を見つけました。
require 'sinatra'
require 'dm-core'
require 'dm-migrations'
require 'haml'
require 'sass'
require 'shotgun'
set :views, :scss => 'views/', :haml => 'template', :default => 'views'
helpers do
def find_template(views, name, engine, &block)
_, folder = views.detect { |k,v| engine == Tilt[k] }
folder ||= views[:default]
super(folder, name, engine, &block)
end
end
get '/css/:name.css' do
scss :styles
end
get '/' do
haml :index
end
ご覧のとおり、代わりに:
get '/css/styles.css' do
sass :styles
end
そのはず:
get '/css/:name.css' do
scss :styles
end
次に、styles.scss を /views フォルダーに配置しました。ただし、:scss => 'パスを .scss ファイルに編集することで、宛先ディレクトリを変更できます。
set :views, :scss => 'views/', :haml => 'template', :default => 'views'