我有一个目录projName/vendor/assets/bootstrap/css/
我正处于生产模式。
production.rb包含:config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/
当我运行rake资产时:预编译
我明白了
projName/public/assets/css/
但我想要projName/public/assets/bootstrap/css/
我不明白为什么bootstrap目录不存在。
实际上,public assets/
答案 0 :(得分:1)
编译资产将写入config.assets.prefix
中指定的位置。默认情况下,这是public/assets
目录。
要理解这一点,您必须首先了解预编译是什么和做什么。让我解释一下
当您运行(佣金任务)时
rake assets:precompile
它会在您的应用程序文件夹中创建一个public
文件夹,该文件夹将编译您的所有资产清单(即您的application.css
和application.js
)
这究竟是怎么发生的? - &GT; Rails捆绑了一个rake任务,它将编译所有这些。 rake任务如上所示。
编译资产将写入config.assets.prefix
中指定的位置。默认情况下,这是public/assets
目录。
用于编译文件的默认匹配器包括application.js,application.css和所有非JS / CSS文件(这将自动包括所有图像资源)来自app / assets文件夹,包括你的宝石。
这正是该正则表达式的含义(包括app / assets文件夹中的所有内容),您也可以明确地提供它,如上面的答案所示。
希望这会有所帮助。
以下是一些供您参考的链接
http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets
http://dennisreimann.de/blog/precompiling-rails-assets-for-development/
答案 1 :(得分:0)
该正则表达式意味着什么?如果你想预编译一切,试试这个。
config.assets.precompile = ['*.js', '*.css']
答案 2 :(得分:0)
实际上,如果你想预编译一切,试试这个:
def precompile?(path)
%w(app lib vendor).each do |asset_root|
assets_path = Rails.root.join(asset_root, 'assets').to_path
return true if path.starts_with?(assets_path)
end
false
end
# Precompile all assets under app/assets (unless they start with _)
Rails.application.config.assets.precompile << proc do |name, path|
starts_with_underscore = name.split('/').last.starts_with?('_')
unless starts_with_underscore
path = Rails.application.assets.resolve(name).to_path unless path # Rails 4 passes path; Rails 3 doesn't
precompile?(path)
end
end