Rails 3.1 指南针和链轮。使困惑

Posted

技术标签:

【中文标题】Rails 3.1 指南针和链轮。使困惑【英文标题】:Rails 3.1 Compass and Sprockets. Confused 【发布时间】:2011-11-21 05:45:20 【问题描述】:

我通常对 Rails 3.2、Sprockets 和 Compass 感到困惑。

    在 article 的顶部,它说 *= require directives,不再需要使用 Sass-Rails,只需使用 @import 代替。 Sass-Rails Github 谈到了一些关于 glob @import 的功能,但根本没有谈到 @import 是新的 *= require。哪个或组合:( 我要使用吗?

    vendor/assets/stylesheets 中有coderay.css.sass 并在application.css.sass 中使用@import 将导入my_coderay.css.sass? 我不知道,因为我在 my_coderay.css.sass 中使用 Compass Mixins(因此将 @import "compass/css3" 放在该文件的顶部)并且我收到错误消息:“找不到要导入的文件或不可读:指南针”

    在article 中,它讨论了配置 Rail 的 Sass 引擎以了解资产路径。但我认为 Sass-Rails 已经@import 资产路径在哪里?

    当我尝试包含罗盘的第 31 个分支时...

    gem 'compass', :git => 'git://github.com/chriseppstein/compass.git', :branch => 'rails31'

    我收到错误... 使用来自 git://github.com/chriseppstein/compass.git(在 rails31)/Users/george.norris/.rvm/rubies/ruby-1.9.2-p180/ 的指南针(0.12.0.alpha.0.22e2458) lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:365:in `initialize': 没有这样的文件或目录 - /Users/george.norris/.rvm/gems/ruby-1.9.2-p180/bundler /gems/gems/compass-0.12.0.alpha.0.22e2458/bin/compass (Errno::ENOENT)

    最后,如果我从供应商/资产中取出 coderay.css.sass 并将其放入应用程序/资产中,我不会收到上述错误。但我得到它在 public/application.css.css (.css.css ???) 中吐出错误

    语法错误:找不到或无法读取要导入的文件:base。 加载路径: 指南针::SpriteImporter /Users/geonorr/Sites/quasar/public/stylesheets/sass /Users/geonorr/Sites/quasar/app/assets/stylesheets /Users/geonorr/.rvm/gems/ruby-1.9.2-p180/gems/compass-0.11.5/frameworks/blueprint/stylesheets /Users/geonorr/.rvm/gems/ruby-1.9.2-p180/gems/compass-0.11.5/frameworks/compass/stylesheets 在 /Users/geonorr/Sites/quasar/app/ 的第 3 行

我正在使用 Rails (3.1.0)、Sass (3.1.7)、Sass-Rails (3.1.0)、Compass (0.11.5)


感谢您的回复。感觉我越来越近了... 包括 Compass Master Branch 并收到此错误:

gem 'compass', :git => 'git://github.com/chriseppstein/compass', :branch => 'master'

使用来自 git://github.com/chriseppstein/compass(在 master)/Users/gnee/.rvm/rubies/ruby-1.9.2-p180/lib/ 的指南针(0.12.alpha.0.d03d529) ruby/site_ruby/1.9.1/rubygems/installer.rb:365:in initialize': No such file or directory - /Users/gnee/.rvm/gems/ruby-1.9.2-p180/bundler/gems/gems/compass-0.12.alpha.0.d03d529/bin/compass (Errno::ENOENT) from /Users/gnee/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:365:inopen' 来自 /Users/gnee/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:365:in shebang' from /Users/gnee/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:456:inapp_script_text'

【问题讨论】:

仅供参考,指南针导轨 3.1 分支消失了。很难找到有关此项目正在发生的事情的信息。 好吧,这就是打包程序失败的原因。是的,关于这个项目的所有信息似乎都已被弃用。 【参考方案1】:

    *= require cmets 从 Sass 的角度来看,可以看作是一种 hacky 解决方法,因为 Sass 有一个专门的语言特性:@import 指令。 @import 告诉 Sprockets 做什么。当您从 Rails 3.0 项目迁移时,请保持所有 @import 语句不变。目前,唯一的问题是“globbing”:如何告诉 Rails/Sprockets 也考虑除 application.css.s(ac)ss 之外的其他 Sass 文件。

    这是 Rails 3.1 的 the latest Compass installation guide。它还解决了通配问题。

    正如在 Rails Guide、app/assetslib/assetsvendor/assets 中所说的,您的应用程序以及您的 gem/引擎中的目录都包含在 Rails.application.config.assets.paths 中。如果您正确安装 compass,我验证了 compass/css3 库中的 +opacity(.5) 可以按预期工作。这将我们引向下一点:

    rails31 分支现在合并到master 中,并且已经发布了支持 Rails 3.1 的 0.12.alpha 版本。然而,这个版本还不是没有错误。所以我建议依靠最新的主版本:

    gem 'compass', git: 'git://github.com/chriseppstein/compass', branch: 'master'

    我目前遇到的唯一错误是尝试编译创建 sprites 的语句时出现“未定义方法 nil.[]”异常。见this issue。一种解决方法是在您的config/compass.rb 中设置sass_options = quite: true

进一步说明:我的 Gemfile 中不再有 Sass。我认为您可以在依赖 sass-rails 时删除该依赖项。

【讨论】:

'@import 告诉 Sprockets 做什么'。 Sass-Rails 页面对此一无所知。有没有涵盖这个的资源?一直在谷歌上搜索到死,没有运气。 指南针创建者announced here:“我们要做的是让 Sass @import 指令通过链轮查找东西。Sass 用户不应该使用 hacky cmets 来完成这种行为。Sass 已经实现了这个功能,我们只需要把它粘在一起。” ...这就是结果:github.com/rails/sass-rails/blob/master/lib/sass/rails/…

以上是关于Rails 3.1 指南针和链轮。使困惑的主要内容,如果未能解决你的问题,请参考以下文章

指南针精灵生成器有啥好的替代品吗? (Rails 精灵生成器)

Rails 3 应用程序中的 Sass 导入错误 - “找不到或无法读取要导入的文件:指南针”

链轮中的链轮是啥意思

WCAG 2.0 和 ATAG 一起

胡凡 《算法笔记》 上机实战训练指南 3.1 简单模拟

Rails Guides - Ruby on Rails 安全指南