I was building a Rails engine that uses zurb-foundation\'s stylesheets, and kep hitting the same Sass::Syntax error. This seemed strange because I had followed the same pro
I found the answer in this Stackoverflow question
The issue is that a Rails engine's dummy app and a regular Rails app have slightly different config/application.rb files.
In a Rails app, you'll see this code towards the top:
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
Bundler.require(*Rails.groups(:assets => %w(development test)))
# If you want your assets lazily compiled in production, use this line
# Bundler.require(:default, :assets, Rails.env)
end
But in an engine dummy app, instead you see:
Bundler.require
require ""
In the Rails app, the first Bundler.require include all groups in the Gemfile but excludes :assets unless Rails.env is :development or :test The second Bundler.require includes :default--that is, anything in your Gemfile that's not in a group--as well as :assets and either :production, :development or :test
In a dummy app, none of this is necessary because 1) it's not meant to be used in production, and 2) test and development typically have similar dependency requirements. Since the :assets group is just a convenient way to apply dependencies to :test and :development but not to :production, in a dummy app it's the same as :default. So in a dummy app, nothing but :default is needed. Since Bundler.require
is (Warning: Spoiler ahead) the same as Bundler.require(:default)
, the dummy app just uses Bundler.require
. This means that anything in your Gemfile that's in a group will be ignored.
So the problem I had was that I was copy-and-pasting from a Rails app Gemfile into a Rails dummy app Gemfile, including group :assets do...
. I removed the group
line and everything worked!
ADDED later in the day on 11/29:
To clarify, the error I was seeing is because sass-rails wasn't included (since it was in the :assets group in my Gemfile), so instead of my assets being parsed as Sass, they were parsed as CSS. Since @import
means something different to CSS than to Sass, whatever was parsing the CSS file was using a different implementation of @import
and couldn't find the file.