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

#ruby-on-rails #ruby-on-rails-3 #assets #sprockets #refinerycms

#ruby-on-rails #ruby-on-rails-3 #активы #звездочки #refinerycms

Вопрос:

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

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

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

Возможно, было бы полезно знать, что я использую refinery-edge.

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

Комментарии:

1. вам удалось это исправить? У меня такая же проблема.

2. К сожалению, пока нет. Я обновлю это, если появятся какие-либо подробности.

3. Возможно, я пришел к решению. Короче говоря, проблема в том, что если переопределенный файл включен через sprockets require , то файл, содержащий это включение, а также все другие файлы, которые он включает, также должны быть переопределены. Взгляните на /app/assets/javascripts/refinery/refinery.js in bundle. Я опубликую подробный ответ позже сегодня.

4. Ну, я думаю, с этим покончено. @Lilitu88, каков твой прогресс?

5. Я понял то же самое. В итоге получился уродливый взлом, а не реальное исправление.

Ответ №1:

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

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

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

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

Ответ №2:

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

Комментарии:

1. мы пытаемся переопределить другой файл. Если я не ошибаюсь, с помощью этого метода у вас есть они оба. Верно?

2. Да, если вы переименуете сгенерированный файл, у вас должны быть оба доступных в рабочей среде. Содержит ли сгенерированный файл весь javascript? Если это произойдет, удалите имя исходного файла из манифеста, переименуйте сгенерированный файл, включите его в свой манифест, и все должно быть готово. Кстати, вы предварительно компилируете свои ресурсы?

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