Как я могу запустить пользовательский код перед любой предварительной компиляцией активов в Rails?
Что-то вроде (в инициализаторе):
Sprockets.before_precompile do
# some custom stuff that preps or autogenerates some asset files
# that should then be considered in the asset pipeline as if they were checked in
end
В частности, я хотел бы запустить задачу gulp для связывания некоторого Javascript с некоторыми специальными препроцессорами,и я бы предпочел не переписывать свой gulpfile, чтобы заставить конвейер активов обрабатывать все... и я также хочу, чтобы это работало на Heroku, не нуждаясь в пользовательском пакете сборки, если это вообще возможно. Есть какие-нибудь мысли? Предположительно звездочки имеют такие типы крючков.
1 ответ:
Как я могу видеть из источника, у звездочек Нет такого крюка, но вы можете использовать крюки задачи грабли. Например, вы создадите задачу rake, которая запускает все препроцессоры, gulp и т. д., чтобы эту задачу можно было поставить перед предварительной компиляцией.
Затем вы просто запускаете# lib/tasks/before_assets_precompile.rake task :before_assets_precompile do # run a command which starts your packaging system('gulp production') end # every time you execute 'rake assets:precompile' # run 'before_assets_precompile' first Rake::Task['assets:precompile'].enhance ['before_assets_precompile']
rake assets:precompile
, и в результате Задачаbefore_assets_precompile
будет выполнена прямо перед ней.Также обязательно используйте
system
вместоexec
, потому чтоexec
завершит процесс на этапе выполнения этой предварительной задачи и не будет бегитеassets:precompile
за собой, как и ожидалось.Источники: