Pass sprockets context and environment to Sass::Engine.
This commit is contained in:
parent
77133fd896
commit
ce4f87e461
|
@ -14,12 +14,26 @@ class SiteCustomization < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def compile_stylesheet(scss)
|
||||
# Get the sprockets environment. In production Rails.application.assets is a
|
||||
# Sprockets::Index instead of Sprockets::Environment, there is no cleaner way
|
||||
# to get the environment from the index.
|
||||
env = Rails.application.assets
|
||||
if env.is_a?(Sprockets::Index)
|
||||
env = env.instance_variable_get('@environment')
|
||||
end
|
||||
|
||||
context = env.context_class.new(env, "custom.scss", "app/assets/stylesheets/custom.scss")
|
||||
|
||||
::Sass::Engine.new(scss, {
|
||||
syntax: :scss,
|
||||
cache: false,
|
||||
read_cache: false,
|
||||
style: :compressed,
|
||||
filesystem_importer: DiscourseSassImporter
|
||||
filesystem_importer: DiscourseSassImporter,
|
||||
sprockets: {
|
||||
context: context,
|
||||
environment: env
|
||||
}
|
||||
}).render
|
||||
|
||||
rescue => e
|
||||
|
|
|
@ -163,30 +163,12 @@ describe SiteCustomization do
|
|||
c.mobile_stylesheet_baked.should == "#a{color:#000}\n"
|
||||
end
|
||||
|
||||
pending 'should allow including discourse styles' do
|
||||
it 'should allow including discourse styles' do
|
||||
c = SiteCustomization.create!(user_id: user.id, name: "test", stylesheet: '@import "desktop";', mobile_stylesheet: '@import "mobile";')
|
||||
c.stylesheet_baked.should_not =~ /Syntax error/
|
||||
c.stylesheet_baked.length.should > 1000
|
||||
c.mobile_stylesheet_baked.should_not =~ /Syntax error/
|
||||
c.mobile_stylesheet_baked.length.should > 1000
|
||||
|
||||
# Vikhyat, this is giving me an anurism
|
||||
#
|
||||
# SiteCustomisation is not initializing sprockets and sprockets enviroment, they are required for asset helpers to function properly
|
||||
# in travis we see this failure quite often:
|
||||
#
|
||||
# /home/travis/.rvm/gems/ruby-2.1.1/gems/sprockets-2.11.0/lib/sprockets/sass_functions.rb:63:in `sprockets_context'
|
||||
# /home/travis/.rvm/gems/ruby-2.1.1/gems/sass-rails-4.0.2/lib/sass/rails/helpers.rb:23:in `asset_url'
|
||||
# /home/travis/.rvm/gems/ruby-2.1.1/gems/sass-3.2.16/lib/sass/script/funcall.rb:113:in `_perform'
|
||||
# /home/travis/.rvm/gems/ruby-2.1.1/gems/sass-3.2.16/lib/sass/script/node.rb:40:in `perform'
|
||||
# eg: https://travis-ci.org/discourse/discourse/jobs/22413830
|
||||
#
|
||||
# This makes sense cause our compile_stylesheet method does not specify sprockets: { context: ctx, environment: ctx.environment }
|
||||
# Thing is, where do you even get this magic context object from and how do you generate it, perhaps Rails.application.assets.context_class.new ...
|
||||
# I dunno, its all voodoo to me
|
||||
#
|
||||
# The "sometimes" failing thing also needs to be determined, this should either always fail or never fail, its a strong indicator that a bunch
|
||||
# of caching is happening, please resolve and re-enable the test
|
||||
end
|
||||
|
||||
it 'should provide an awesome error on failure' do
|
||||
|
|
Loading…
Reference in New Issue