Кажется, что Sprockets имеет встроенную кэшированную среду, которая загружает список всех возможных активов в начале запроса, а затем требование каких-либо активов вне этого списка вызывает ошибку.
Я написал пользовательскую директиву для создания нового файла CSS - мне нужно обернуть содержимое существующего файла в новый селектор - что-то вроде этого:
class DirectiveProcessor < Sprockets::DirectiveProcessor
def process_wrap_directive(path)
src = Rails.root.join("app", "assets", "stylesheets", path)
dst = Rails.root.join("app", "assets", "stylesheets", "wrapped", path)
File.write(dst, ".new-selector {" + File.read(src) + "}")
process_require_directive("wrapped/" + path)
end
end
Однако запрос нового упакованного актива не выполняется, поскольку он отсутствует в списке файлов, о которых знает Sprockets. При обновлении страницы первый ресурс будет успешным, поскольку теперь он существует в начале запроса и, таким образом, находится в кэшированном списке, но второй ресурс не будет выполнен и т. Д.
Есть ли способ обойти это? Отключение кеша не решило проблему.
Я предполагаю, что это относится к этому коду https://github.com/rails/sprockets-rails/pull/197/files - но если не открывать несколько классов, есть ли способ избежать кэшированной среды?