Sinatra で twitter bootstrap v2.3.0

Sinatra で bootstrap 使おうとしてはまったのでめも。

たぶん今しか使えない情報。

へたれなので現時点の最新のdocumentが使える 2.3 をゲット

https://github.com/twitter/bootstrapをcloneして、

git checkout -b v2.3.0 

で 2.3に

それぞれの js, less, img フォルダをsinatraでpublic_folderに設定したところの下にコピーしてくる。

自分は下のようにした

./public/js/bootstrap
./public/css/bootstrap
./public/img/bootstrap

overrideするlessを置く

自分は./public/css/override.lessに置いた

// import bootstrap
@import "./bootstrap/bootstrap.less";

// change path to image.
@iconSpritePath: "../img/bootstrap/glyphicons-halflings.png";
@iconWhiteSpritePath: "../img/bootstrap/glyphicons-halflings-white.png";

まず普通にGemfileに追加

source :rubygems

gem "sinatra"
gem "less"

それっぽくかいてみる

某掲示板のanswerをそのまま書いてみる。

require 'less'
require 'sinatra/base'

class App < Sinatra::Base
  # Make LESS @import statements work
  Less.paths << settings.views

  # Use LESS for CSS
  get '/stylesheets/:style.css' do
    less(params[:style].to_sym)
  end
end

しかしエラー

pathが見つからない云々いわれる。

いろいろ試しながらソースよんでいくと、cssディレクトリにoverride.less置くには直接viewsオプションを指定しないといけないっぽ。

get "/css/:style.css" do
  less(params[:style].to_sym, views: "#{dirname}/web/public/css")
end

いけた、、とおもってアクセスすると

Less::Error - Cannot call method 'charAt' of undefined

。。。わからん( ̄Д ̄;)

よくよく調べてみると、bootstrap 2.3 で使われている less のversionにless.rbが対応してないっぽい

対応されているこのコミットのverをありがたく使わしていただくことにする。

gem "less", git: "https://github.com/populr/less.rb", branch: "v2.2.2-less1.3.3", submodules: true

submodules: true はなぜか(gitリポジトリを直接指定しているから?)だと submoduleのjs(JSのless)をdlしてこなかったから。

これでやっとみれた!ヾ(@^▽^@)ノ