我想要包含所有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
答案 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