Rails4だと、
を使うと、最新のChromeでSassのSourcemap(v3)が使える
Gemfileに
group :development, :test do gem 'sass-rails-source-maps' end
と書いて、
$ bundle update sass
として、サーバをリスタート。ChromeのDeveloper Tools > 設定(ギアアイコン) > General > Enable CSS source maps をオンにしておく。 これで、通常どおりの要素のインスペクトでscssファイルが表示されるはず(*.sassには未対応なのか普通のcssが表示される)。
参考:
[追記:2013-11-23]
Safari7でも同様にscssのインスペクトができた。
さらに追記。*.sassファイルのSourcemapが作られないのは、どうやらSprocketsのメソッドのオーバーライドに失敗してるかららしい。RubyのインスタンスメソッドをModuleのメソッドでオーバーライドするにはちょっとしたノウハウが必要らしい。
参考:
- rails で Mix-in するときにすでにあるメソッドをオーバーライドする - 情報建築学って何さ?
- Ruby: how to override class method with a module - Byte Friendly
*.scssの場合に動いてるのは、Sprockets::ScssTemplateがSprockets::SassTemplateを継承していて、定義にはメソッドがないから、includeしたモジュールのメソッドが優先されるためかな・・・。*1
ということで、Pullreqを送ってみた。
Pullreq送るときは緊張する・・・。
Compassを一緒に使う場合、バージョンに注意
sass-rails-source-mapsがsassの3.3.0.alpha以上に依存しているので、Gemfileで次のようにバージョン指定する。
gem 'compass', '~> 0.13.alpha.10'
あと、余談ですが、compass-railsというGemを使えば設定なしでCompassが使えるはずなんだけど、
`require': cannot load such file -- sass/script/node (LoadError)
とか、compassのimportエラーが出てうまく行かない。
にあるように、initializers/compass.rbなどに
Rails.configuration.assets.paths << Compass::Frameworks['compass'].stylesheets_directory
と書くことでCompassが使えるようになった。
*1
の検証のために次のようなコードを書いてみたが、予想と異なる結果に。こうなると、元のコードがどうして動いているのかがわからない。デバッガも入れて動作を追ってみたけれど、結局分からずじまい。見逃している点がありそうで不安。まあ、間違ってたらPullreqのDiscussionで指摘してくれるだろう。
module Original class Klass def overridden puts 'original' end end class Successor < Klass end end Original::Klass.new.overridden #=> 'original' Original::Successor.new.overridden #=> 'original' # # Override1 # module Override1 module Klass def overridden puts 'override 1' end end end Original::Klass.class_eval do include Override1::Klass end Original::Successor.class_eval do include Override1::Klass end Original::Klass.new.overridden #=> 'original' Original::Successor.new.overridden #=> 'original' ここがoverride1になると期待してた :( # # Override2 # module Override2 module Klass def self.included base base.class_eval do def overridden puts 'override 2' end end end end end Original::Klass.send(:include, Override2::Klass) # Original::Successor.send(:include, Override2::Klass) # This isnt needed Original::Klass.new.overridden #=> 'override 2' Original::Successor.new.overridden #=> 'override 2'