资产管道和供应商资产。如何将它们添加到Rails 4中进行预编译?

时间:2014-10-19 04:31:00

标签: ruby-on-rails ruby-on-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文件。

我显然缺少包含某些内容,但是什么?

如果我在production.rb中使用这样的东西:

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

我遇到了大量的错误,因为它会遍历/ vendor /目录中的每个样式表。如果我尝试具体(例如指定style.css),相同的初始错误仍然存​​在,并且样式无处可寻。

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

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

2 个答案:

答案 0 :(得分: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,以防你想知道。我认为这可能有一个更优雅的解决方案,但现在可以使用。

答案 1 :(得分:0)

你应该在production.rb中设置:

config.assets.compile = true

并在命令行中使用:

  rake assets:precompile

在启动服务器之前。