2016-01-14 6 views
0

Я видел несколько вопросов/ответов, избегающих предварительной компиляции различных активов при использовании конвейера Rails; однако я хочу эффективно выполнять черный список через массив совпадений Regex для соответствия имени пути, чтобы исключить из предварительной компиляции. Чаще всего для меня это часто представляет собой набор партиций, которые в любом случае не будут прекомпиляции.Избегайте предварительной компиляции активов в Rails (черный список по Regex)

ответ

1

Первый раз - keithgaputis мастерски answered a part of this here, но это не совсем ответ на вышеуказанный вопрос. Читайте и голосуйте свой ответ, а затем увидеть мои дополнения к его ниже:

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, играйте с rubular), а во-вторых, устраните все, что соответствует черным спискам. Счастливое кодирование!

Смежные вопросы