Я видел несколько вопросов/ответов, избегая предварительной компиляции различных активов при использовании конвейера Rails; однако я хочу эффективно выполнять черный список через массив Regex для совпадений по имени пути, чтобы исключить из предварительной компиляции. Чаще всего для меня это часто представляет собой набор партиций, которые в любом случае не будут прекомпиляции.
Избегайте предварительной компиляции активов в Rails (черный список по Regex)
Ответ 1
Вначале - keithgaputis умело ответил на часть этого здесь, но это не совсем ответ на вышеупомянутый вопрос. Прочитайте и проголосуйте за свой ответ, а затем ознакомьтесь с моими дополнениями ниже:
Rails.application.config.assets.precompile << Proc.new { |path|
blacklist = [
/nvd3\/src\/intro.js$/,
/nvd3\/src\/outro.js$/,
/^.*\.less$/,
/admin\/modules/,
/admin\/themes/,
/admin\/responsive\..*css/
]
full_path = Rails.application.assets.resolve(path)#.to_path
puts "path: #{path}\nfull_path: #{full_path}" if BLACK_MAGIC[:assets][:debug]
if (path =~ /(^[^_\/]|\/[^_])[^\/]*$/) and (path !~ Regexp.union(blacklist) )
puts "including asset: " + full_path if BLACK_MAGIC[:assets][:debug]
true
else
puts "excluding asset: " + full_path if BLACK_MAGIC[:assets][:debug]
false
end
}
Вы можете добавить все свои регулярные выражения в черный список для исключения, а затем две части, если условие
if (path =~ /(^[^_\/]|\/[^_])[^\/]*$/) and (path !~ Regexp.union(blacklist) )
сначала исключит элементы, начинающиеся с подчеркивания (это еще не совсем идеальное Regex, игра с рублем), а во-вторых, устранит все, что соответствует черным спискам. Счастливое кодирование!