Переопределение внутренних активов в производственной среде

Я работаю над проектом, который должен немного изменить поведение WYMEditor Refinery. Это легко сделать, переопределив jquery.refinery.wymeditor.js с помощью rake refinery:override и отредактировав его в соответствии с моими потребностями, что отлично работает в среде разработки.

Однако когда дело доходит до производства, переопределения игнорируются. То есть скомпилированный ассет просто содержит jquery.refinery.wymeditor.js из бандла, и редактирование этого файла прямо там может дать нужный эффект, но так делать не следует.

Странно то, что проблема, по-видимому, проявляется только при попытке переопределить ресурсы, связанные с серверной частью.

Возможно, будет полезно узнать, что я использую очистку-край.

Любая помощь приветствуется.


person unclenorton    schedule 20.10.2011    source источник
comment
вам удалось это исправить? У меня такая же проблема.   -  person bluediapente    schedule 27.10.2011
comment
К сожалению, еще нет. Я обновлю это, если появятся какие-либо подробности.   -  person unclenorton    schedule 28.10.2011
comment
Возможно, я пришел к решению. Короче говоря, проблема в том, что если переопределенный файл включается через require sprockets, то файл, содержащий это включение, а также все другие файлы, которые он включает, также должны быть переопределены. Взгляните на /app/assets/javascripts/refinery/refinery.js в комплекте. Я опубликую подробный ответ позже сегодня.   -  person unclenorton    schedule 31.10.2011
comment
Ну, думаю, я закончил с этим. @ Lilitu88, как твои успехи?   -  person unclenorton    schedule 04.11.2011
comment
Я понял то же самое. Закончилось уродливым взломом, а не реальным исправлением.   -  person bluediapente    schedule 06.11.2011


Ответы (2)


Так что мне удалось его победить. Первое, что следует упомянуть, это то, что это было бы невозможно без доступа к исходному коду Refinery.

Как я уже писал в комментарии, проблема заключалась в том, что я пытался переопределить ресурс (wymeditor/jquery.refinery.wymeditor.js в моем случае), который не был включен в представление напрямую. , но упоминается в другом ассете, взятом из драгоценного камня. А так как sprockets ничего не знает о переопределениях Refinery, он брал ссылочные ассеты по относительному пути, т.е. из гема (и, следовательно, тоже без изменений). Итак, опять же, в моем случае решение состояло в том, чтобы переопределить refinery/wymeditor.js, и все работало как шарм.

Если вам нужно изменить любой другой внутренний скрипт, кроме WYMEditor, вам, скорее всего, придется переопределить refinery/refinery.js, который включает в себя все остальные внутренние сценарии, в дополнение к самому сценарию, который вам нужно изменить. .

Однако есть одна большая проблема. Со всеми этими переопределениями я сделал любые обновления очень подверженными ошибкам, так как некоторые файлы будут обновляться, а некоторые нет. Этого можно было бы избежать, переопределив все, но это фактически означает полное отсутствие обновлений.

person unclenorton    schedule 03.11.2011

Попробуйте изменить имя сгенерированного файла и включить его в свой манифест вместо исходного имени. Подозреваю, что он предпочитает оригинал при наличии двух активов с одинаковым названием.

person Richard Hulse    schedule 25.10.2011
comment
мы пытаемся переопределить другой файл. Если я не ошибаюсь, с этим методом у вас есть и то, и другое. Верно? - person bluediapente; 27.10.2011
comment
Да, если вы переименуете сгенерированный файл, оба должны быть доступны в рабочей среде. Содержит ли сгенерированный файл весь javascript? Если это так, удалите имя исходного файла из манифеста, переименуйте сгенерированный файл, включите его в свой манифест, и все будет готово. Кстати, вы предварительно компилируете свои активы? - person Richard Hulse; 28.10.2011
comment
Я пробовал как предварительную компиляцию, так и компиляцию на ходу с тем же результатом. Сегодня попробую ваше решение и посмотрю, что из этого выйдет. - person unclenorton; 28.10.2011