#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. Я пробовал как предварительную компиляцию, так и компиляцию на ходу с тем же результатом. Попробую ваше решение сегодня и посмотрю, что из этого выйдет.