【问题标题】:Sass import from rails engine not working从 Rails 引擎导入 Sass 不起作用
【发布时间】:2014-06-13 13:55:31
【问题描述】:

我为资产创建了一个 Rails 引擎。我不将链轮用于 css。相反,我依赖 sass 的 @import。这在测试/虚拟应用程序中运行良好,但在需要引擎的 Rails 应用程序中,它一直在抛出

Sass::SyntaxError: File to import not found or unreadable: gumby.

我已经有一段时间了,最​​初该路径不在 sass 的加载路径中。但后来我加了

config.sass.load_paths << "#{Gem.loaded_specs['gumby_on_rails'].full_gem_path}/app/assets/stylesheets"

到我的config/application.rb,现在它肯定显示了我要导入的文件的正确路径。它是以下跟踪中列出的倒数第二个路径:

Sass::SyntaxError: File to import not found or unreadable: gumby.
Load paths:
  CompassRails::SpriteImporter
  CompassRails::SpriteImporter
  CompassRails::SpriteImporter
  CompassRails::SpriteImporter
  CompassRails::SpriteImporter
  CompassRails::SpriteImporter
  CompassRails::SpriteImporter
  CompassRails::SpriteImporter
  CompassRails::SpriteImporter
  /Users/brandon/code/personal/blog_update/app/assets/images
  /Users/brandon/code/personal/blog_update/app/assets/javascripts
  /Users/brandon/code/personal/blog_update/app/assets/stylesheets
  /Users/brandon/code/personal/blog_update/vendor/assets/javascripts
  /Users/brandon/code/personal/blog_update/vendor/assets/stylesheets
  /Users/brandon/.rvm/gems/jruby-1.7.11@blog/gems/angularjs-rails-1.0.7/vendor/assets/javascripts
  /Users/brandon/.rvm/gems/jruby-1.7.11@blog/gems/turbolinks-2.2.2/lib/assets/javascripts
  /Users/brandon/.rvm/gems/jruby-1.7.11@blog/gems/jquery-rails-3.1.0/vendor/assets/javascripts
  /Users/brandon/.rvm/gems/jruby-1.7.11@blog/gems/coffee-rails-4.0.1/lib/assets/javascripts
  /Users/brandon/code/personal/gumby/app/assets/stylesheets
  /Users/brandon/code/personal/blog_update/app/assets/stylesheets

rails 引擎的树看起来像这样

app/
  assets/
    stylesheets/
      gumby/
        ...
      gumby.css.scss

(我知道从技术上讲,您应该在引擎中命名所有资产,但我不想使用 gumby/gumby,而且我觉得名称冲突的可能性很小。)

所以在测试/虚拟应用程序中,我可以通过@import 'gumby'; 导入此文件,但在 Rails 应用程序中失败。除上述例外。我如何让它工作?

顺便说一句,这是一个 Rails 4.1 应用程序,其他几个“类似”问题的答案都是由于在 Gemfile 中使用了组。 Rails 4 摆脱了组,所以这不是问题/解决方案。

【问题讨论】:

    标签: ruby-on-rails sass asset-pipeline rails-engines ruby-on-rails-4.1


    【解决方案1】:

    那么你应该这样写:

    config.sass.load_paths << "#{Gem.loaded_specs['gumby_on_rails'].full_gem_path}/app/assets/stylesheets/gumby"
    

    或试试这个(未经测试)

    @import_tree 'gumby';
    

    【讨论】:

    • 这看起来可能已经解决了我的问题,如果我还没有以其他方式解决的话。
    【解决方案2】:

    所以对我来说,解决方案是将其吸收并命名为gumby/gumby。然后我还得把config/application.rb改成:

    config.assets.paths << "#{Gem.loaded_specs['gumby_on_rails'].full_gem_path}/app/assets/stylesheets"
    

    由于某种原因,modular-scale 没有被正确地需要,即使引擎已经需要它。所以我不得不将application.css.scss 更改为application.css.scss.erb 并将&lt;% require 'modular-scale' %&gt; 放在顶部。

    【讨论】:

    • 终于!在 Rails 4.2.1 中,我花了很长时间弄清楚如何添加 Sass load_path。 config.sass.load_pathsSass::Engine::DEFAULT_OPTIONS[:load_paths]Sass::Plugin.options[load_paths] 似乎没有效果(与原始问题不同,我没有看到跟踪中列出的路径),但 config.assets.paths 有效..
    • 想一想,也许我的问题是我需要添加一个非 Sass 路径——我看到我的错误来自 ActionView::Template::Error,而不是 Sass::SyntaxError。尽管如此,这个答案似乎已经解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多