添加所有.css文件到预编译?

时间:2017-11-06 15:00:41

标签: ruby-on-rails twitter-bootstrap ruby-on-rails-5 bootstrap-4

我想要包含所有css文件以进行预编译。现在我使用@import将其他css包含到application.css中。但我想根据控制器加载特定的css文件:

<%= stylesheet_link_tag params[:controller] %>

它给了我一个错误,告诉我将css添加到预编译器。假设我将此添加到config / initializers / assets.rb:

Rails.application.config.assets.precompile += %w( pages.css )

现在它可以工作,但仅限于那个特定的控制器。我可以手动为每个控制器添加每个css文件。它会像那样工作,但必须有更好的方法。

我使用bootstrap所以我无法使用:

*= require_

我试过了(不是同时):

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

但现在我收到了这个错误:

Undefined variable: "$alert-padding-y".

我猜这来自bootstrap。但是在我尝试将文件添加到预编译之前它正在工作。

=====

编辑:我尝试了Daniel Westendorf帖子。将此代码放在assets.rb中:

Rails.application.config.assets.precompile = []
Dir[Rails.root.join("app", "assets", "**", "*.css")].each do |file|
  Rails.application.config.assets.precompile << file
end

但我收到了这个错误:

Asset was not declared to be precompiled in production.
Add `Rails.application.config.assets.precompile += %w( application.css )` to `config/initializers/assets.rb` and restart your server

我尝试通过添加css和js来修复它(稍后要求它):

Rails.application.config.assets.precompile += %w( application.css application.js )

但我仍然以相同的错误结束:

Asset was not declared to be precompiled in production.
Add `Rails.application.config.assets.precompile += %w( pages.css )` to `config/initializers/assets.rb` and restart your server

2 个答案:

答案 0 :(得分:1)

这通常违反了更好的网络惯例。对于您而言,一个较大的缓存网络请求将比许多较小的个人网络请求更好。

但是,您可以在资产目录中找到所有.css个文件,并将每个文件添加到预编译数组中。类似的东西:

Rails.application.config.assets.precompile = []
Dir[Rails.root.join("app", "assets", "**", "*.css")].each do |file|
  Rails.application.config.assets.precompile << file
end

答案 1 :(得分:0)

我使用了这段代码。它对我来说非常好。

config/initializers/assets.rb

中添加此代码
# for css files
Dir[Rails.root.join("app", "assets", "**", "*.css")].each do |file|
  Rails.application.config.assets.precompile << file
end

# for js files
Dir[Rails.root.join("app", "assets", "**", "*.js")].each do |file|
  Rails.application.config.assets.precompile << file
end