2014-10-19 87 views
0

这令人难以置信的令人沮丧。资产管道和供应商资产。你如何将它们添加到Rails 4中进行预编译?

我已经添加了一些CSS文件到我的供应商资产,我似乎无法让他们得到预编译,或者至少是由我的生产服务器找到的。

这些文件的东西被发现是这样的:

/vendor/assets/stylesheets/cssfw/style.css 
/vendor/assets/stylesheets/cssfw/app.css 
/vendor/assets/stylesheets/cssfw/plugins.css 
/vendor/assets/stylesheets/cssfw/custom.css 

他们正装这样对我application.css

*= require cssfw/style.css 

而且里面的style.css

@import url(app.css); 
@import url(plugins.css); 
@import url(custom.css); 

这在我的开发环境(很明显)中工作正常,但所有这4个CSS文件不能在asse中的任何位置找到在生产中。

我很明显想包括一些东西,但是什么?

如果我使用production.rb是这样的:

config.assets.precompile += %w(*.css) 

我得到的错误的攻势,因为那样它通过每一个样式表我在/供应商/目录。如果我尝试具体(比如指定style.css),则相同的初始错误仍然存​​在,并且无法找到样式。

他们应该如何准确地包括在内?最好是,我不想包含所有供应商资产文件,因为实际上我只使用了少数几个文件夹,但该文件夹包含大约20个左右,我还没有配置。

我在Apache Phusion Passenger上使用Rails 4.1.6和Ruby 2.1.0。

回答

0

你应该production.rb设置:

config.assets.compile = true 

,并在命令行中使用:

rake assets:precompile 

启动它的服务器之前。

+0

他们已经这样设置。是的,我已经运行了rake资源:预编译。 – user3209270 2014-10-19 09:23:19

+0

你为什么将它们添加到“供应商”?将其添加到应用程序。 – BallsOfSteel 2014-10-19 09:24:50

+0

因为它们必然会被开发者改变,而不是由我改变。这不仅仅是一个特定的CSS,还有很多。它是框架的一部分。 – user3209270 2014-10-19 09:26:22

1

诀窍在于将@import更改为*= require,导致@import不在资产管道之后。我仍然不清楚为什么会发生这种情况,但是我在style.css中改变了这一点,毕竟这个时间实际上是一直加载的。

在我application.css:

*= require cssfw/style # /vendor/cssfw/style.css 

而在style.css文件的第一部分:

/* 
*= require cssfw/app   # /vendor/cssfw/app.css 
*= require cssfw/plugins  # /vendor/cssfw/plugins.css 
*= require cssfw/custom  # /vendor/cssfw/custom.css 

*= require cssfw/plugins/animate   # /vendor/cssfw/plugins/animate.css 
*= require cssfw/plugins/box-shadows  # /vendor/cssfw/plugins/box-shadows.css 
*/ 

这将使Rails的寻找他们在适当的地方供应商管道,虽然我被迫实际上包括整个路径,减去cssfw。如果我放弃它,它在开发中运行良好,但生产无法找到它们。

如果您想知道,我没有将其他任何内容移动到我的application.rb或production.rb中。我认为这可能有一个更优雅的解决方案,但现在可以使用。