ruby-on-rails - Sass::Engine.render 没有导入蓝图库...为什么?

标签 ruby-on-rails ruby ruby-on-rails-3 sass blueprint-css

我正在尝试使用 Sass::Engine.new 以编程方式将一些 sass 渲染到 CSS 中.我遇到了一个问题,我不知道如何让它允许 @import GEMMIFIED_SASS_MODULE。例如,这就是我正在尝试的:

?> sass = "@import \"blueprint/reset\"\nh1\n  width: 100%"
=> "@import \"blueprint/reset\"\nh1\n  width: 100%"
>> puts sass # For readable version
@import "blueprint/reset"
h1
  width: 100%
=> nil
>> Sass::Engine.new(sass, :syntax => :sass).render
Sass::SyntaxError: File to import not found or unreadable: blueprint/reset.
Load path: /Users/username/projects/my_app
        from (sass):1
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/import_node.rb:64:in `rescue in import'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/import_node.rb:42:in `import'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/import_node.rb:25:in `imported_file'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/perform.rb:149:in `rescue in visit_import'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/perform.rb:154:in `visit_import'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/base.rb:37:in `visit'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/perform.rb:18:in `visit'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/base.rb:53:in `block in visit_children'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/base.rb:53:in `map'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/base.rb:53:in `visit_children'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/perform.rb:27:in `block in visit_children'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/perform.rb:39:in `with_environment'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/perform.rb:26:in `visit_children'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/base.rb:37:in `block in visit'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/perform.rb:47:in `visit_root'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/base.rb:37:in `visit'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/perform.rb:18:in `visit'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/visitors/perform.rb:7:in `visit'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/tree/root_node.rb:20:in `render'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/engine.rb:299:in `_render'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/sass-3.1.15/lib/sass/engine.rb:246:in `render'
        from (irb):30
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'
        from /Users/username/.rvm/gems/ruby-1.9.2-p290@my_app/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'

当我将一些 sass 放入文件并在顶部使用 @import blueprint/reset 时,我这样做没问题,它能够即时编译成 CSS开发模式和通过 rake assets:precompile。但是我有一个新的用例,我需要自己渲染一些并且遇到了这个问题。在尝试渲染之前,我尝试添加 require 'compass'require 'compass-rails'require 'compass/rails'它,但它不起作用。要求工作(因为它在要求文件后说 truefalse),但它在我的 Sass::Engine 中似乎仍然不可用.new().render 调用。

在我的 Gemfile 中我有:

gem 'haml-rails'
gem 'sass-rails'
gem 'compass-rails'

有人知道在使用 Sass::Engine 时我可以做些什么来使库可见吗?我在 Reference 中找不到任何内容或 Documentation

最佳答案

您没有提供 Blueprint 的路径,SASS 找不到它。

Compass 是为解决此问题而创建的工具。它提供了一个扩展生态系统,无需提供路径即可直接导入。

您正在尝试使用普通的 SASS 来做到这一点。要解决此问题,您必须让 SASS 熟悉 Compass 扩展的存储位置:

# Allowing vanilla SASS use Compass extensions
Compass.sass_engine_options[:load_paths].each do |path|
  Sass.load_paths << path
end

关于ruby-on-rails - Sass::Engine.render 没有导入蓝图库...为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10591030/

相关文章:

ruby-on-rails - Rails - 多态自联接模型关联

ruby-on-rails - 使用没有 "compass watch"的 compass 在 rails 中运行 sourcemaps/auto-reload

ruby-on-rails - Sqlite where 子句不起作用(这是一个错误吗?)

ruby-on-rails - Ruby On Rails 查询总和和组?

mysql - Web开发从哪里开始?

Nginx +乘客+导轨-403禁止的错误

ruby-on-rails - 从 Angular 服务调用 Rails 函数

ruby-on-rails - 有_许多 :autosave => true skips validation when saving children

ruby-on-rails - 如何防止 Rails 应用程序启动?

Ruby while 循环在满足条件时不会停止