Ответ 1
Вы можете просто написать это следующим образом:
config.assets.precompile += ['directory/*']
Как использовать config.assets.precompile в производстве, чтобы включать только файлы в 'lib/assets/javascripts', 'lib/assets/stylesheets', 'vendor/assets/javascripts' и 'vendor/assets/stylesheets?
В основном что-то вроде:
config.assets.precompile += %w( pagespecific.js anotherpage.js )
Но используется для автоматического включения файлов в определенные каталоги, которые не являются "app/assets/javascripts" или "app/assets/stylesheets".
* edit: добавив решение, которое я закончил, использовал для специфики страницы js
config.assets.precompile += ['pages/*.js']
Вы можете просто написать это следующим образом:
config.assets.precompile += ['directory/*']
Точкой компиляции активов является создание одного (или небольшого количества) файлов для минимизации количества HTTP-запросов из браузера.
Если вы собираетесь обслуживать каждый файл по отдельности, почему бы не просто отключить прекомпиляцию?
Чтобы использовать прекомпиляцию по назначению, создайте целую директорию в один файл, используя Sprockets 'require_directory
:
//= require_directory ./awesome_js_app
... и укажите этот файл в массиве config.assets.precompile
.
По умолчанию все CSS встроены в application.css
и JS в application.js
. Вы можете добавить больше файлов верхнего уровня для компиляции с директивой precompile в config/environments/production.rb
(и другие envs, если хотите). Например:
config.assets.precompile += %w( public.css public.js )
Затем директивы Sprockets //= require ...
в файлах верхнего уровня будут определять состав окончательного скомпилированного файла.
Вы можете использовать эти дополнительные файлы верхнего уровня в своих макетах, чтобы иметь разные CSS и JS для определенных видов.
Я нашел эту ссылку и думаю, что она вам полезна, см.
keithgaputis ответ. Rails config.assets.precompile для обработки всех файлов CSS и JS в приложении/ресурсах
Я думаю, вы можете сделать следующее:
# In production.rb
config.assets.precompile << Proc.new { |path|
if path =~ /\.(css|js)\z/
full_path = Rails.application.assets.resolve(path).to_path
app_assets_path = Rails.root.join('app', 'assets').to_path
if full_path.starts_with? app_assets_path
puts "excluding asset: " + full_path
false
else
puts "including asset: " + full_path
true
end
else
false
end
}
Вероятно, лучше включить это как путь к ресурсу (в соответствии с вашим примером):
config.assets.paths << Rails.root.join('app', 'assets', 'javascripts', 'pages')
Он также позволяет включать пути не в каталог активов (например, с включением bootstrap-sass
). Эти пути затем добавляются в папку ваших ресурсов в вашем общедоступном каталоге и перемещаются в ваше местоположение вашего ресурса, если вы используете что-то вроде asset_sync
.