萨斯@import指令Rails中使用时,引擎无法找到插件资产(Sass @import direc

2019-07-04 06:08发布

我是建设一个使用zurb-基金会的样式表一个Rails引擎,白马击中同萨斯::语法错误。 因为我曾跟随在Rails应用程序相同的过程,它是在第一次尝试的工作,这似乎很奇怪。 所以我决定通过启动两个新的轨道项目,以零上ISSE - 一个应用程序和一个引擎 - 并将其配置与设置最少量的使用基础。

我开始用2条干净的Rails 3.2.9项目-一个应用程序和一个engine --full并把它们加入foundation_and_overrides.scss和手动配置为基础, require在CSS清单-ing它。

然后我创建一个最基本的控制器,所以我想有一个页面加载。 对于应用程序,加载该页面并查看页面源代码,我可以看到,基础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)

(请注意,虚拟应用程序的CSS清单是require -ing插件的CSS清单,这是require -ing foundation_and_overrides.scss,布线显然不是问题,因为错误是来自foundation_and_overrides.scss升起)

我想这与一些建立红宝石1.9.3的(P125,194,P327,我认为)具有相同的结果。

它仍然当我加入这行来测试/空/配置/ application.rb中没有工作:

config.assets.paths << "#{Foundation::Engine.root}/scss"

即使基础/普通/ _ratios.scss存在于该路径。

该问题可能与无礼,链轮,指南针,基金会或者Rails,所以我不知道在哪里可以从这里走。

我报告说,它是与基金的问题 ,但我不那么确信这一点。

谁看过这个吗?

Answer 1:

我发现,在回答这个问题#1

问题是,一个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

但是,在发动机的虚拟应用程序,您看到:

Bundler.require
require "<PLUGIN_NAME>"

在Rails应用程序,第一Bundler.require包括在Gemfile中所有群体,但不包括:资产,除非Rails.env是:开发或:测试第二Bundler.require包括:默认情况下 - 也就是,在你的Gemfile任何东西,这不是在一组 - 以及:资产之一:生产:开发或:测试

在一个虚拟的应用程序,这一切都不是必要的,因为1)它并不意味着在生产中使用,并且2)测试和开发通常有类似的依赖性要求。 由于:资产组只是应用的依赖关系的快捷方法:测试:开发而不是:生产,虚拟应用程序是一样的:默认。 因此,在一个虚拟的应用程序,不过是:需要默认。 由于Bundler.require是(警告:提前剧透)一样Bundler.require(:default) ,虚拟应用程序只使用Bundler.require 。 这意味着,在您的Gemfile任何东西,这是一个组中会被忽略。

所以,我有这个问题是我是复制和粘贴从一个Rails应用程序的Gemfile到一个Rails应用程序虚拟Gemfile中,包括group :assets do... 。 我删除了group线和一切工作!

加入当天晚些时候在11/29:

为了澄清,我所看到的错误是因为青菜护栏没有被列入(因为它是在:在我的Gemfile资产组),所以不是我的资产作为无礼的话,他们被解析为CSS被解析。 由于@import意味着CSS,而不是无礼,无论是解析CSS文件不同的东西用不同的实现的@import ,无法找到该文件。



Answer 2:

嘿家伙我解决了这个问题,我花了像5小时,以找出如何解决它(抱歉我的英语,是不是我的母语)。

基金会的正常安装在Rails的它并没有为我的发动机工作,所以我手动做到了:

添加此行到application.html.erb: <meta name="viewport" content="width=device-width, initial-scale=1.0>

加入这一行your_engine /应用/资产/ Java脚本/ your_engine_name / application.js中: //= require foundation

这是我如何解决它:

加入这一行your_engine /应用/资产/样式表/ your_engine_name / application.css(注:我没有重命名为application.scss): *= require your_engine_name/foundation_and_overrides

并且:

对于发展,在Gemfile中注释行,说“声明仍处于发展这里,而不是在#你gemspec的依赖。这些措施可能包括从你的路径或#Git的边缘导轨或宝石。请记住,这些依赖移动到您的gemspec之前释放#你的宝石rubygems.org“。 所以,我补充一点,我需要的宝石,(基金会,上海社会科学院,指南针等)

和Tha的一切,这是我得到我的引擎与基金会合作的方式,



文章来源: Sass @import directive when used in Rails engine can't find assets in plugins