長い一日の後、John Feminella と彼の google への投稿のおかげで、問題を解決することができました。私にとって難しかったのは、新しい Sprockets::Context を作成する方法を見つけることでした。幸いなことに、John のソリューションは Context を必要としません。
更新された要旨はこちら
試み #1
このコードでは、アセット パイプラインから css ファイルをインポートできません。
@import "foundation";
基礎がコンパスモジュールとしてロードされているため機能します
@import "custom_css";
ファイルが見つからないというエラーメッセージが表示される
def call(template)
erb = ActionView::Template.registered_template_handler(:erb).call(template)
%{
options = Compass.configuration.to_sass_engine_options.merge(
:syntax => :scss,
:custom => {:resolver => ::Sass::Rails::Resolver.new(CompassRails.context)},
)
Sass::Engine.new((begin;#{erb};end), options).render
}
end
試み #2
このコードは、asset-data-url を使用して base64 URL を埋め込むことができません
def call(template)
erb = ActionView::Template.registered_template_handler(:erb).call(template)
%{
compiler = Compass::Compiler.new *Compass.configuration.to_compiler_arguments
options = compiler.options.merge({
:syntax => :scss,
:custom => {:resolver => ::Sass::Rails::Resolver.new(CompassRails.context)},
})
Sass::Engine.new((begin;#{erb};end), options).render
}
end
試行 3
コンテキストの作成中に空の値を使用できることがわかりました。以下のコードは開発では機能しますが、本番環境ではエラーがスローされます。
ActionView::Template::Error (can't modify immutable index)
Sprockets::Environment の代わりに使用される Sprockets::Index でエラーが発生しているようです。Sprockets::Environment に切り替えても問題は解決しません。
def call(template)
erb = ActionView::Template.registered_template_handler(:erb).call(template)
%{
context = CompassRails.context.new(::Rails.application.assets, '', Pathname.new(''))
resolver = ::Sass::Rails::Resolver.new(context)
compiler = Compass::Compiler.new *Compass.configuration.to_compiler_arguments
options = compiler.options.merge({
:syntax => :scss,
:custom => {:resolver => resolver}
})
Sass::Engine.new((begin;#{erb};end), options).render
}
end