Я нашел этот ответ раньше, и мы с радостью использовали find_asset
в нашем приложении (Rails 3.2.16), пока однажды оно не начало бомбить.
После некоторого копания оказывается, что даже в производственной среде с включенной прекомпиляцией ресурса первый вызов find_asset
попытается фактически скомпилировать искомый актив, даже если этот актив уже был предварительно скомпилирован. Как вы можете себе представить, это нехорошая новость - в нашем конкретном случае мы включили файл библиотеки Compass в таблицу стилей, которая работала в dev и во время прекомпиляции, но не работала, когда Compass не было в загрузке ресурсов путь.
Короче говоря, find_asset
не является пуленепробиваемым способом определить, доступен ли актив для включения. Вы можете прочитать больше об этом в проблеме, которую кто-то пытался подать по этому поводу, и которая впоследствии была закрыта как ошибка: https://github.com/sstephenson/sprockets/issues/411
Реальный способ определить, существует ли актив и работает ли он как в режиме компиляции, так и в режиме прекомпиляции, демонстрируется в тех обручах, через которые должен был пройти файлер вышеуказанных проблем. Вот разница для его исправления: https://github.com/fphilipe/premailer-rails/pull/55/files
Я помещаю это здесь в надежде, что другие гуглеры, которые найдут это, не попадут в ту же ловушку, что и я!