Патчите ли вы модули?

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 6 мая 2012 в 16:32

Прежде всего - патчить != хакать.
Накладываете ли вы патчи? Есть ли у вас какой-то список патчей Must have?
Откуда появился данный вопрос вообще.
Я сейчас работаю с довольно большим проектом, апдейты накатывать бездумно никак нельзя.
Есть определённый список патчей, который появился на основе изучения родственных сборок (Drupal commons), есть выстраданные патчи, когда вот оно должно работать, но не работает.
Для затравки, делаюсь списком патчей, патчи из этого списка будут переодически устаревать, и может быть обновляться

user_badges
Нет проверки на права доступа в пункте меню

  $items['user/%/badges'] = array(                                              
    'title' => 'Badges',                                                        
    'page callback' => 'user_badges_userweight_page',                          
    'page arguments' => array(1),                                              
    'access callback' => TRUE,                                                  
    'type' => MENU_LOCAL_TASK,                                                  
    'weight' => 4,                                                              
    );  

invite
http://drupal.org/node/1043280

user_delete
http://drupal.org/node/1425182#comment-5565988
Патч исправляет WSOD на Drupal >= 6.24

Realname
наложен патч http://drupal.org/node/1070102#comment-4128184

Activity Log
http://drupal.org/files/1306252-activity_log_node_og_dupes-b.patch

Diff
14.03.2012
http://drupal.org/files/372957-diff-strip-html-73.patch

User Relationships
14.03.2012
http://drupal.org/files/ur_alter_remove_links.patch
http://drupal.org/files/issues/user_relationships_disable_notifications_...

-URNA
14.03.2012
http://drupal.org/files/issues/urna-relationships-747798.patch (http://drupal.org/node/747798)

Views attach
Наложен патч http://drupal.org/files/1409556-attach-empty-b.patch

Комментарии

Аватар пользователя andypost@drupal.org andypost@drupal.org 6 мая 2012 в 17:34

Без патчей тяжко, да и кода без ошибок не бывает! Хорошо бы еще научить людей писать ревью на эти патчи, дабы они быстрее были приняты в основной код модулей

Аватар пользователя SplasH SplasH 6 мая 2012 в 17:44

От себя добавлю - у Phpmailer'a проблемы в заголовках писем в некоторых почтовиках. Патч брать отсюда.

Field Collection при использовании с dev версией Entity API вообще ломается - патч отсюда брать.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 6 мая 2012 в 17:51
"SplasH" wrote:

Спасибо, Жень.
От меня тоже неплохая пачка сегодня-завтра прилетит.
Но я ещё думаю о формате подачи и ведения "бухгалтерии".
Энди как вариант предложил способ Габра http://hojtsy.hu/d8mi

Аватар пользователя kodo kodo 6 мая 2012 в 18:28

Если функционал модуля под мои задачи работает корректно - не устанавлию понятное дело, хотя может кому-то они и понядобятся. Если что-то не так шарюсь по решениям и если есть конечно устанавливаю патч.

Аватар пользователя OldWarrior OldWarrior 6 мая 2012 в 18:44

Обычно нет. Может, просто как-то везло до сих пор.

Но. Не патчить, а именно хакать, к сожалению, пару раз пришлось один файл - mail.inc (из-за мультибайтной кодировки русскоязычные строки в теле email-сообщения получаются в два раза короче). Проблема, впрочем старая и известная. В D7 она тоже осталась.

Лечил добавлением вызова собственной функции переноса строк в drupal_wrap_mail_line() (аналогичное решение http://www.drupal.ru/node/25184).

Аватар пользователя Shok211 Shok211 6 мая 2012 в 18:52

Только если время поджимает... А так проще внешним модулем костыли наваять

p.s Последний и единственный патч брал с drupal.org под Webform позволяюший ставить условия для отправки сообщений на емаил

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 6 мая 2012 в 19:09
"Shok211" wrote:

Только если время поджимает... А так проще внешним модулем костыли наваять

Очень интересно как вы будете ваять костыли в случае, например, такого косяка
http://drupal.org/node/1425182#comment-5565988
http://drupal.org/node/1070102#comment-4128184

Аватар пользователя emzzy emzzy 6 мая 2012 в 20:08
"RxB" wrote:

Очень интересно как вы будете ваять костыли в случае, например, такого косяка
http://drupal.org/node/1425182#comment-5565988
http://drupal.org/node/1070102#comment-4128184[/quote]
Может он использует только проверенные модули, в которых нет таких косяков?

Аватар пользователя SplasH SplasH 6 мая 2012 в 20:10
"emzzy" wrote:

Может он использует только проверенные модули, в которых нет таких косяков?

А можно мне список таких модулей поимённо?

Аватар пользователя emzzy emzzy 6 мая 2012 в 20:13
"SplasH" wrote:

А можно мне список этих модулей поимённо?

Хотите сказать, что у всех модулей есть такие косяки, которые необходимо патчить? У всех модулей есть косяки, это да, но! не все модули из-за этого нужно патчить. Ибо косяки есть мелкие, есть такие, которые можно исправить в своем модуле, что-то переопределив, есть такие от которых проще отказаться и взять или альтернитиву или наваять свое.

Аватар пользователя SplasH SplasH 6 мая 2012 в 20:16
"emzzy" wrote:

У всех модулей есть косяки, это да, но

"emzzy" wrote:

есть такие, которые можно исправить в своем модуле

Косяки исправляются патчами. В своих модулях допиливается или отпиливается функционал.
В дополнение - патч полезен для сообщества, а костыли - индивидуальны.

Аватар пользователя emzzy emzzy 6 мая 2012 в 20:22
"SplasH" wrote:

Косяки исправляются патчами. В своих модулях допиливается или отпиливается функционал.

У вас на сайте стоит 20 модулей(допустим). 5 из них вы пропатчили. 15, которые вы не патчили, разве не имеют косяков? Имеют, но вы, или просто на них не наткнулись, или нашли другое решение, или решили, что эти косяки несущественны(например некий Notice).

"SplasH" wrote:

В дополнение - патч полезен для сообщества, а костыли - индивидуальны.

Да, но заказчик платит, за то, что вы ему предоставите готовое решение, и его мало волнует как вы это сделаете. Индивидуальное решение - это просто индивидуальное решение, и если его проще и быстрее реализовать это не значит, что это костыль.

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

Аватар пользователя SplasH SplasH 6 мая 2012 в 20:28
"emzzy" wrote:

У вас на сайте стоит 20 модулей(допустим). 5 из них вы пропатчили. 15, которые вы не патчили, разве не имеют косяков? Имеют, но вы, или просто на них не наткнулись, или нашли другое решение, или решили, что эти косяки несущественны(например некий Notice).

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

"emzzy" wrote:

Да, но заказчик платит, за то, что вы ему предоставите готовое решение, и его мало волнует как вы это сделаете.

Ага, а потом после таких разработчиков этот самый заказчик ищет других разработчиков, ибо предыдущие наговнокодили так, что никто уже не разберётся. В первую очередь результат зависит от правильного подхода к решению задач.

Аватар пользователя emzzy emzzy 6 мая 2012 в 20:41
"SplasH" wrote:

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

Все по потребностям. Если есть возможность решить проблему другим способом(а они есть и были указаны мной выше), тогда не патчить. Если нет других возможностей тогда патчить.

"SplasH" wrote:

Ага, а потом после таких разработчиков этот самый заказчик ищет других разработчиков, ибо предыдущие наговнокодили так, что никто уже не разберётся. В первую очередь результат зависит от правильного подхода к решению задач.

Я не вижу взаимосвязи между качеством кода и индивидуальными решениями. Вы делаете тему для заказчика - это индивидуальное решение. Вы пишите свой модуль, под конкретный сайт - это индивидуальное решение. Это ведь не означает, что вы непременно пишите говнокод? Универсальные решения требуют совсем другого подхода чем индивидуальные. Их необходимо более тщательно тестить, делать проверку на то, как они сказываются на производительности, все ли возможные случаи покрывают, проверять совместимость с другими модулями и т.д. Безусловно, такие действия нужно делать и с индивидуальными решениями, но в этом случае проверка ограничиваются только конкретным проектом.

Аватар пользователя Shok211 Shok211 6 мая 2012 в 20:54

Ну вот вам простой пример... После того как я установил на webform патч который делает n энных вещей , кстати , написанный для сообщества. Я закончил заказ и отдал заказчику, тут заказчик решил обновить модули потому что:
a) Нашли уязвимость в модуле webform
b) Нашли уязвимость в патче.
v) Разработчик который решил добавить функционал на ваш сайт вряд ли будет копаться во все модулях для того что бы узнать где вы там что патчили.
Исход ? Сайт лежит...и вы снова идете и патчите сайт который вы уже сделали, объясняете что модули обновлять нельзя и вы это сделали чтобы заказ был быстрее выполнен. И не важно что именно из за моей лени я не написал форму на FORM API, не полез в ядро модуля и не написал form_alter для формы, не дождался стабильной версии... Или вы готовы поддерживать каждое обновление модуля и ставить патч заново ? В чем экономия времени ?

Аватар пользователя SplasH SplasH 6 мая 2012 в 20:53
"emzzy" wrote:

Все по потребностям. Если есть возможность решить проблему другим способом(а они есть и были указаны мной выше), тогда не патчить. Если нет других возможностей тогда патчить.

Я всё понять не могу - с каких пор баги одного модуля решаются путём создания другого?

"emzzy" wrote:

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

С таким же успехом Дрис в 2000 году мог бы сделать индивидуальный проект для себя, и сидели бы мы сейчас на джумле.

"emzzy" wrote:

Это ведь не означает, что вы непременно пишите говнокод?

Тождественно это не равно конечно, но незнание правильных подходов к решению задач обычно обусловлено отсутствием понимания архитектуры системы. И в этом случае простые вещи делаются очень сложно, что приводит к захламлению проекта.

Аватар пользователя SplasH SplasH 6 мая 2012 в 20:55
"Shok211" wrote:

a) Нашли уязвимость в модуле webform
b) Нашли уязвимость в патче.

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

Аватар пользователя Shok211 Shok211 6 мая 2012 в 21:01

Я ведь говорил про то что если ваш патч отличается от патча вышедшего для модуля логикой работы то модуль работать не будет. Уже второй раз спотыкаюсь об эти грабли. Первый раз я писал патч который позволяет в views файлы оборачивать ссылками на их thumbnails. Дак с обновлением на 3 views. Перестала работать галерея, и я 2 дня искал куда что опять надо патчить. Хотя самым удобным решение было написать эту галерею без views. 2 Брал сайт готовый и обновлял все модули

Аватар пользователя emzzy emzzy 6 мая 2012 в 21:07
"SplasH" wrote:

Я всё понять не могу - с каких пор баги одного модуля решаются путём создания другого?

Читайте выше пример от Shok211. Еще примеры:

  1. Не прописаны правила доступ к странице у какого-то модуля, к которой по логике может иметь доступ только админ, а имеют все. Прописываем свой hook_menu_alter в своем модуле
  2. Вьюшка криво создает хандлер - создаю свой хандлер в своем модуле и его использую.
  3. Taxonomy menu большим количеством терминов выжирает всю память. Делаю свою выборку, или делаю менюшку через Views и кеширую ее.
"SplasH" wrote:

С таким же успехом Дрис в 2000 году мог бы сделать индивидуальный проект для себя, и сидели бы мы сейчас на джумле.

Вспомните историю, как Дрис создавал свой Drupal. http://ru.wikipedia.org/wiki/Drupal Он не хотел создать универсальное решение, он создавал индивидуальное решение для себя.

"SplasH" wrote:

Тождественно это не равно конечно, но незнание правильных подходов к решению задач обычно обусловлено отсутствием понимания архитектуры системы. И в этом случае простые вещи делаются очень сложно, что приводит к захламлению проекта.

Если вы понимаете архитектуру Drupal, вы одинаково качественно сделаете, как индивидуально, так и универсальное решение. Но, как было указано мной выше, универсальное решение требует напорядок больше времени и усилий.

Аватар пользователя SplasH SplasH 6 мая 2012 в 21:19
"emzzy" wrote:

Не прописаны правила доступ к странице у какого-то модуля, к которой по логике может иметь доступ только админ, а имеют все. Прописываем свой hook_menu_alter в своем модуле

Это не баг. Это функционал. По-хорошему это должно быть в модуле, но разработчик имеет право не реализовывать эту фичу.

"emzzy" wrote:

Вьюшка криво создает хандлер - создаю свой хандлер в своем модуле и его использую.

"emzzy" wrote:

Taxonomy menu большим количеством терминов выжирает всю память. Делаю свою выборку, или делаю менюшку через Views и кеширую ее.

Я пытаюсь донести одно - если бы каждый делал только для себя, то сообщества не было бы. Каждый мой проект обязательно сопровождается статьями в блог, модулями на д.орг, и кучей патчей. Поэтому я принципиально против решений "для себя" - без активной работы "для людей" комьюнити потухнет. Если вы сделали свою выборку в taxonomy menu - запостите ишью на д.орг со своим решением. Это займёт 5-10, зато поможет сотням людей.

Аватар пользователя Айдар Айдар 6 мая 2012 в 21:24
"<a href="mailto:andypost@drupal.org">andypost@drupal.org</a>" wrote:

Хорошо бы еще научить людей писать ревью на эти патчи

Стараюсь всегда ревьюировать патчи - правда, чаще всего приходится отрицательно.

Другое дело, когда разработчики не спешат включать их в ядро новых версий - яркие тому примеры views, flag и global redirect - хотя, вероятно, есть на то причины.

Аватар пользователя Shok211 Shok211 6 мая 2012 в 21:31

Мы вроде обсуждали не про сообщество и как ему помочь, а про решения конкретных проблем за короткие сроки без фатального исхода через неделю. Хотя я абсолютно согласен что сделал модуль поделись со всеми.

p.s Раз уж можно пофлудить. Уже 3 неделю хочу выложить модуль для удобного управления alias. Написал введение xD. У кого есть желание может подхватить. Модуль позволяет добавлять новые пути на уже существующие.

Аватар пользователя SplasH SplasH 6 мая 2012 в 21:34
"Shok211" wrote:

Уже 3 неделю хочу выложить модуль для удобного управления alias. Написал введение xD. У кого есть желание может подхватить. Модуль позволяет добавлять новые пути на уже существующие.

Создавай отдельную ветку и покажи наработки.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 7 мая 2012 в 0:29
"Shok211" wrote:

После того как я установил на webform патч который делает n энных вещей

Уже неверно. Покажите мне этот патч на drupal.org
1 патч должен в себе нести 1 фикс.

"Shok211" wrote:

Исход ?

Исход простой.
Накатываешь патчи - проинформируй другого, а то даже и себя. Вас никто не побьёт если вы завелёте файлик patches.txt и положите его, например, в sites.

"Shok211" wrote:

Или вы готовы поддерживать каждое обновление модуля и ставить патч заново ?

Может вы не доросли, но делать сайты качественно и брать их на дальнейшую поддержку гораздо выгоднее и менее геморно, чем делать сайты тяп-ляп, лишь бы перед каникулами заработать.
А наложить патч много времени не занимает
curl http://drupal.org/files/og_views-add-leave-group-field-1128492-06.patch | git apply -v
И патч наложен.
То что вы написали, увы, говорит о вашем низком уровне как разработчика.

Аватар пользователя emzzy emzzy 7 мая 2012 в 0:34
"SplasH" wrote:

Я пытаюсь донести одно - если бы каждый делал только для себя, то сообщества не было бы. Каждый мой проект обязательно сопровождается статьями в блог, модулями на д.орг, и кучей патчей. Поэтому я принципиально против решений "для себя" - без активной работы "для людей" комьюнити потухнет. Если вы сделали свою выборку в taxonomy menu - запостите ишью на д.орг со своим решением. Это займёт 5-10, зато поможет сотням людей.

Вы действительно немного отклонились от темы. Релиализовать свое решение, для конкретного клиента - это совершенно не значит, что я положу его в шкаф и не буду ни с кем делиться. То, что нужно делиться я не опровергаю ни в коем случае, а наоборот стараюсь помогать и представлять свое виденье и свои решения, хотя и делаю это недавно.

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

Аватар пользователя Shok211 Shok211 10 ноября 2015 в 11:48

Ниже прикреплен патч ну или фикс, как вам виднее... Темы я так и не нашел.

Опыт работы с 16 до 18 лет (Вроде у меня 1 тема в блоге была о просьбе платных консультаций полтора года назад) действительно не большой.

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

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 7 мая 2012 в 1:16
"Shok211" wrote:

Ниже прикреплен патч ну или фикс, как вам виднее... Темы я так и не нашел.

Вот issue http://drupal.org/node/687606

"Shok211" wrote:

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

Я сегодня перебрал полностью сборку Commons 2.6, ознакомился с изменениями в коде, какие патчи и куда накладывались, что фиксят/вносят и нужно ли мне это, не утомился, а вполне ещё после отработал рабочий день.
Начните с себя, развивайтесь, читайте best practice, потом делайте выводы.
Ну и да, наложение патчей автоматизируется на ура.