Isa*_*esh 3 sass sprockets ruby-on-rails-3.2 zurb-foundation compass-sass
我正在构建一个使用zurb-foundation的样式表的Rails引擎,并且kep遇到了相同的Sass :: Syntax错误.这看起来很奇怪,因为我在Rails应用程序中遵循了相同的过程,并且在第一次尝试时就已经完成了.所以我决定通过启动两个新的rails项目 - 一个应用程序和一个引擎 - 来实现这一目标,并将它们配置为使用基础并进行最少量的设置.
我开始使用2个干净的Rails 3.2.9项目 - 一个应用程序和一个应用程序,engine --full
并通过添加foundation_and_overrides.scss并require
在CSS清单中将它们配置为基础.
然后我创建一个简单的控制器,所以我有一个页面加载.对于应用程序,加载该页面并查看页面源代码,我可以看到基础CSS已正确编译并加载.
当我为引擎尝试相同的东西时,我收到了这个错误:
Sass::SyntaxError in Main#index
Showing /<PLUGIN_PATH>/test/dummy/app/views/layouts/application.html.erb where line #5 raised:
File to import not found or unreadable: foundation/common/ratios.
Load path: /<PLUGIN_PATH>/test/dummy
(in /<PLUGIN_PATH>/app/assets/stylesheets/example_plugin/foundation_and_overrides.scss)
Run Code Online (Sandbox Code Playgroud)
(请注意,虚拟应用程序的CSS清单是require
-ing插件的CSS清单,它是require
-ing foundation_and_overrides.scss.布线显然不是问题,因为错误是从foundation_and_overrides.scss引发的)
我用几个Ruby-1.9.3版本(p125,194,p327,我认为)尝试了相同的结果.
当我将此行添加到test/dummy/config/application.rb时,它仍然无效:
config.assets.paths << "#{Foundation::Engine.root}/scss"
Run Code Online (Sandbox Code Playgroud)
即使在该路径上存在foundation/common/_ratios.scss.
问题可能出在Sass,Sprockets,Compass,Foundation或Rails上,所以我不知道从哪里开始.
我把它作为基金会的问题报告,但我不是那么相信.
谁看过这个吗?
我在Stackoverflow问题中找到了答案
问题是Rails引擎的虚拟应用程序和常规Rails应用程序的config/application.rb文件略有不同.
在Rails应用程序中,您会看到此代码位于顶部:
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
Run Code Online (Sandbox Code Playgroud)
但在引擎虚拟应用程序中,您会看到:
Bundler.require
require "<PLUGIN_NAME>"
Run Code Online (Sandbox Code Playgroud)
在Rails应用程序中,第一个Bundler.require包含Gemfile中的所有组但不包括:assets,除非Rails.env是:development或:test第二个Bundler.require包括:default - 即你的Gemfile中没有的任何东西一组 - 以及:资产和:生产,开发或:测试
在虚拟应用程序中,这些都不是必需的,因为1)它不打算用于生产,2)测试和开发通常具有类似的依赖性要求.由于:assets组只是将依赖项应用于:test和:开发但不是:production的便捷方式,在虚拟应用程序中它与:default相同.所以在虚拟应用程序中,除了:默认是必需的.既然Bundler.require
是(警告:Spoiler提前)Bundler.require(:default)
,虚拟应用程序只是使用Bundler.require
.这意味着您的Gemfile中的任何内容都将被忽略.
所以我遇到的问题是我从Rails应用程序Gemfile复制并粘贴到Rails虚拟应用程序Gemfile中,包括group :assets do...
.我删除了group
线,一切正常!
在11月29日当天晚些时候添加:
为了澄清,我看到的错误是因为没有包含sass-rails(因为它位于我的Gemfile中的:assets组中),所以不是将我的资产解析为Sass,而是将它们解析为CSS.因为@import
与CSS不同,所以解决CSS文件的问题是使用不同的实现@import
并且找不到文件.
归档时间: |
|
查看次数: |
4007 次 |
最近记录: |