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:in
open'
来自 /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:in
app_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/assets
、lib/assets
或 vendor/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 精灵生成器)