Настройка собственного сервера обновлений своих модулей Drupal за 5 минут

Главные вкладки

Аватар пользователя brg brg 11 марта 2010 в 9:45

Немного справки о модулях в Drupal. Модули они как пакеты в Debian-based системах и естественно со временем выходят новые версии. Drupal сам умеет следить за актуальностью модулей, но проверять последние версии можно не только с головного сайта! Можно использовать и сторонние сервера обновлений!

Информация о новых обновлениях выдается по средствам получения XML файла при запуске "регулярных процедур" (т.е. в cron сервера настраивается запуск .php файла). Все просто. Осталось только указать нашему модулю откуда брать сведения и собственно подготовить их. Все это дело 5 минут. Но как всегда нужно задаться вопросом - "А зачем это вообще?" Smile Если вы уже уверенны что вам это нужно, значит можно пропустить пару абзацев.

Иногда из сайта в сайт тянутся разного рода мелочи, которые в принципе нужны на каждом сайте, но каждый раз делать их вручную утомляет. В теории все эти нужды нужно закладывать в установочный профиль, который при установке системы должен внести необходимые настройки. Но на практике выходит что некоторый функционал можно сделать только через хуки (hooks). Часть конечно можно сделать и через темизацию, но потом тащить через тему для каждого сайта не очень удобно. Соответственно очень удобно внедрить на сайты модуль, который будет по средствам хуков внедрять нужный функционал. Но этот модуль нужен только для тебя и выкладывать его на drupal.org не очень логично, но ведь и его скорее всего нужно будет дорабатывать, потому что с первого раза ничего не получится в любом случае. И если этот модуль мы планируем внедрять в несколько сайтов, то нужно что бы сайты следили за появлением новых версий.

Но толчком для сабжа стала другая задача .. большая проблема экспорта товаров в Яндекс.Маркет. Всем нужно, но дальше фразы "Если кому то нужно, то я сделаю" ничего не продвинулось. И вот, пока мы ждали что кто либо сделает за нас нашу работу, время кончилось. Нужно сделать в сжатые сроки, поэтому придется делать самому, но помещать его на drupal.org я не очень хочу, потому что нужно только для РФ, да и всякие "поделки" размещать тоже не хотелось до момента, пока я не решу что модуль действительно может быть хоть немного полезным кому то. Кстати, модуль для Яндекс.Маркета я таки нашел (http://drupal.org/node/735106), через день после того как отчаялся и решил писать свой Smile

Что же нам нужно что бы модуль брал сведения об обновлениях со сторонних серверов?

Когда мы пишем .info файл для нашего модуля мы можем воспользоваться "не задокументированной функцией" Smile Параметр "project" указывает что это за проект, но есть ещё параметр "project status url", который, как можно догадаться указывает URL откуда тянуть обновления. В принципе на этом заканчивается настройка модуля. Ниже будет приводиться пример на пустом модуле "yml".

name = yml
description = "Yandex Market Language"
dependencies[] = views
core = "6.x"
datestamp = "1267343379"
project = "yml"
project status url = "http://updates.local/fserver"
version = "6.x-1.0-alpha1"

Какую же ссылку указывать для обновления?

Ребята из Development Seed создали продукт, который позволяет организовывать сервер обновлений Feature Server. Он потребует за собой несколько зависимостей:
CCK, Context, Features, Filefield, Views. Т.е. для этого мы поставим по адресу http://updates.local/ Drupal и сделаем из него сервер обновлений. Дальше его остаётся только включить.

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

Теперь наш сервер установлен и готов к работе. Теперь можно создавать проекты и релизы. Сначала нужно создать проект.

Тут нужно указать название проекта, машинное имя, тип (профиль, модуль, тема) и метод добавления файлов (вручную или из SVN/Git репозитория).

Потом создаем релиз указывая нужные нам данные.


Теперь у нас есть релиз "Yandex Market Language 6.x-1.0-alpha1". Именно такой мы создали вначале, установим его.

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


Все отлично, наш модуль "Up to date".

Теперь создадим ещё один релиз, но не укажем его как обновления безопасности.

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

Вот теперь Drupal включил панику. Создадим ещё один релиз. И снова Drupal показывает нам сколько версий вышло с момента установки модуля.

Вот собственно и все.

Комментарии

Аватар пользователя brg brg 11 марта 2010 в 15:02

VladSavitsky wrote:
Интересно - спасибо.
Но почему бы не воспользоваться возможностями drupal.org и не выложить туда свои модули?

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

Я не про YML. Модуль для Я.Маркета выложить нужно, его не я написал. Я для примера показал на том, что собирался делать, но через день нашел случайно в "иссуях" на drupal.org, а там он появился только 7 марта.

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

Аватар пользователя adubovskoy adubovskoy 11 марта 2010 в 17:01

"brg" wrote:
бы сначала потестировал на своих проекта и только потом дал потестить всем остальным, когда будут уверен что это уже более-менее стоящая вещь. Это так сказать мой таракан Smile

Хороший таракан. Всем бы таких тараканов) Спасибо за статью, очень интересно в целом. Размышляем теперь над сферами применения)

Аватар пользователя dimedrol dimedrol 11 марта 2010 в 17:49

Полезная тема. Мне в обозримом будущем понадобится такой апдейт сервер.
За наводку на Feature Server отдельное спасибо! Smile

Аватар пользователя VladSavitsky VladSavitsky 11 марта 2010 в 19:31

"brg" wrote:
А про то, что делаю я .. ну не очень я хочу выкладывать только что начатое, я бы сначала потестировал на своих проекта и только потом дал потестить всем остальным, когда будут уверен что это уже более-менее стоящая вещь. Это так сказать мой таракан =)

Да, согласен - у каждого есть модули, которые либо заточены под определённые сайт или задачу, либо сыроваты, либо не интересны вообще никому, кроме одного заказчика.
Но, как правило, выпускать релизы для таких модулей тоже не настолько сложно, чтобы заводить свой сервер обновлений.

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

На примере простого (если не сказать примитивного) модуля bloggers (http://drupal.org/project/bloggers) могу сказать, что без пиара на друпал.ру (http://drupal.ru/node/38100) никто бы его не заметил. Когда я выложил версию 1.0, то был на 100% уверен, что мне больше не придется никогда там ничего менять - просто нечему там ломаться.
Но люди нашли много ошибок и за 3-5 дней вышло 5 релизов!!!
И каждый раз я думал, что теперь уж точно ВСЁ исправил!..

Кроме того, на орг можно управляться с issue. Поэтому не стоит переживать за сырость модуля - главное быть готовым обработать поток сообщений про ошибки и предложений. Но от этого код модуля только станет лучше.