Rails3.1.0 + rails_adminでassets:precompileをすると失敗する
先日の某クラウドの大崩落があって急遽ECにサーバーをうつしたのですが、assets:precompile中にどうやってもエラーを吐いてとまってしまいます
$ rake assets:precompile (略) rake aborted! stack level too deep (in /Users/xxxxx/.rvm/gems/ruby-1.9.2-p290/bundler/gems/rails_admin-1e2984414293/app/assets/stylesheets/rails_admin/imports.css.scss.erb)
--traceしても-vしてもなにもでないので、原因を追ってたんだけど不明(´Д`;)
Railsを3.1系のstableにすると、今度はhamlとjpmobile周りでエラーをだすという踏んだりけったり状態。
結局saas-railsが3.1.6だとアウトだというところにたどり着くのにまるまる1日かかりました(´Д`;)
Gemfileの該当箇所をバージョン固定にしてとりあえず回避できました。
gem 'sass-rails', "3.1.5"
(´Д`;)
で、興味本位で原因を追ってみると
-------------------- lib/sass/rails/template_handlers.rb --------------------- index 1b3b31e..2350476 100644 @@ -19,7 +19,7 @@ module Sass::Rails nil end - def public_path(path, scope) + def public_path(path, scope = nil) context.asset_paths.compute_public_path(path, ::Rails.application.config.assets.prefix) end @@ -72,14 +72,17 @@ module Sass::Rails options = sass_options_from_rails(scope) load_paths = (options[:load_paths] || []).dup load_paths.unshift(importer) + resolver = Resolver.new(scope) + css_filename = File.join(::Rails.public_path, resolver.public_path(scope.logical_path)) + ".css" options.merge( :filename => eval_file, + :css_filename => css_filename, :line => line, :syntax => syntax, :importer => importer, :load_paths => load_paths, :custom => { - :resolver => Resolver.new(scope) + :resolver => resolver } ) end
これが原因か……