Этот модуль предоставит работающую систему автоматического обновления для сообщества Odoo v10.
Столбец checksum_dir
будет добавлен к ir.module.module
, который будет представлять контрольную сумму sha1 каталога (используйте checksumdir
). Также будет добавлен столбец checksum_installed
который будет представлять контрольную сумму версии модуля, которая установлена в данный момент.
Текущее меню Updates
в Приложениях будет заменено меню с идентичным наименованием, в котором будет отображаться древовидное представление записей ir.module.module
, имеющих checksum_dir
, отличное от checksum_installed
.
Возможно, имеет смысл добавить кнопку в заголовок приведенного выше древовидного представления, чтобы обеспечить функциональность Update Apps List
, которая сделает процесс более гибким. Или, может быть, это следует просто неявно вызывать при просмотре списка обновлений.
Модули для обновления будут выбраны в древовидной структуре, а в меню Action
возможность запланировать их обновление.
Само обновление будет запланировано с использованием стандартного механизма Odoo установки ir.module.status
на to upgrade
. Оттуда будет работать уже существующая кнопка Apply Scheduled Upgrades
в пользовательском интерфейсе.
Чтобы продвинуться дальше, мы также добавим параметр сервера для настройки задания cron для автоматического обновления модулей в определенные моменты времени.
Приятно иметь возможность перенаправлять все входящие веб-запросы на определенный статический шаблон во время обновления, что позволило бы продлить период обслуживания.
У кого-нибудь есть мысли об этом или уже существующий код, на котором я мог бы это основать?
@lasley и автоматический git fetch и git reset? Мне бы понравилось это.
Не все используют Git, поэтому это невозможно.
: +1: для функции обновления сообщества.
Некоторые из наших экземпляров все еще не Dockerized, так что я мог бы согласиться добавить обработку git в качестве опции, чтобы немного упростить работу с устаревшими версиями и немного отодвинуть обновления.
Единственная проблема, с которой мы столкнемся, по крайней мере, при моих развертываниях, заключается в том, что пользователь Odoo не имеет доступа на запись в каталоги модулей, за исключением некоторых редких случаев (и даже тогда, только их ./static
dir). Разве это не ваш случай @ Yenthe666?
Привет @lasley ,
Нет, у нас нет этой проблемы. Именно для этого у нашего пользователя Odoo есть доступ к папкам /odoo
.
С Уважением,
Yenthe
Также @pedrobaeza это можно легко настроить как параметр, чтобы разрешить его тем, кто этого хочет или использует git.
хорошо, тогда
@ Yenthe666 - Добавить функцию достаточно просто, поэтому мы продолжим и реализуем это. Это также поможет в наших средах разработки, которые не имеют такой безопасности, как наши продукты.
В качестве примечания, я не рекомендую конфигурацию, которая разрешает пользователю Odoo доступ на запись к файлам, которые ему явно не нужно записывать. Это общий вектор атаки для других CMS, таких как Wordpress и Magento, поэтому я чувствую, что здесь будет то же самое. Обычно, если злоумышленник получает контроль над Odoo, он может внедрить вредоносный код в места, куда вы бы никогда не заглянули.
Одно из решений - забыть о git и версиях и вместо этого использовать контрольные суммы SHA. Задание ir.cron
будет:
@lasley У нас есть этот модуль, который частично покрывает то, что вы предлагаете, а также https://github.com/ingadhoc/odoo-support/tree/9.0/database_tools.
Мы уже рассказывали о днях odoo и oca sprint days, но это не привлекло внимания
Вы можете проверить презентацию, доступную в readme. Мы добавили «cli», чтобы вы могли исправить базу данных из командной строки с помощью чего-то вроде «odoo.py fixdb». При исправлении db он запускает веб-клиент на том же xmlrpc со статической страницей, сообщающей, что вы находитесь на этапе обновления.
В модуле много уродливых вещей, но мы используем его на производстве более трех лет.
@Yajo - Отличная идея. RFC обновлен. Имеет ли смысл просто генерировать контрольные суммы каталогов при загрузке Odoo, или, может быть, нам нужна кнопка?
@jjscarafia - Сладкое спасибо, что
Я предполагаю, что кнопка по умолчанию «Запустить cron сейчас» поможет. Он действительно был бы нужен ИМХО, но он у вас уже есть.
Я бы также был как можно менее умным и оставил бы checksum_installed
пустым по умолчанию. Следующая итерация cron посчитает это несоответствием и обновит все. И с этого момента все будет хорошо. Cron должен быть предварительно настроен для работы в 3 часа ночи или около того.
@lasley Да, его дубликаты много, но этот был до того, как появился Oca. У меня есть незавершенная задача, чтобы проверить oca, которые не рекомендуют эту функциональность при переходе на odoo 10, поэтому согласовать с этим, чтобы функциональность модулей обновления в другом модуле была бы замечательной. Все еще не очень хорошо знаком с последствиями перехода на LGPL, но для меня это не проблема. Что мне делать, чтобы разрешить использование кода и изменение лицензии?
@jjscarafia - Основное значение для LGPL состоит в том, что кто-то может создать производную от вашего приложения с закрытым исходным кодом, поэтому они определенно довольно тяжелые. Взгляните на эту разбивку, которая слишком упрощена, но я думаю, что она понятна.
Вы увидите, что «Та же лицензия» применяется только тогда, когда производная программа не использует ваше программное обеспечение в качестве библиотеки. С точки зрения непрофессионала это означает, что лицензии GPL и AGPL будут распространяться на все, что зависит от вашего модуля в манифесте. LGPL будет внедряться только в код, который вносит изменения в фактический код вашего модуля, поэтому простая зависимость от него в манифесте позволит вам выбрать любую лицензию (возможно, проприетарную).
Все, что нам нужно, - это ваше согласие на изменение разрешения и лицензии. Моя команда перенесет все, что нам нужно, затем отметит вас в PR и получит ваше одобрение. Затем у нас есть запись вашего согласия на изменение, и мы готовы к работе.
Я не углублялся в ваш модуль, но мне было любопытно, что делает часть fix_db
? Это просто запускает обновление всего?
@lasley, спасибо за ссылку и объяснение, теперь все ясно. Ладно, я жду пинга по пиару.
Этот метод вызывается из интерфейса базы данных и запускает обновление для каждого модуля, который требует обновления (в отношении изменений в последней и установленной версии).
Команда cli "fixdb" вызывает этот метод для каждой базы данных (если вы не указали ее) или для базы данных -d.
Мы используем это в точке входа часового образа докера, поэтому при запуске контейнера мы всегда обновляем модули, если это необходимо.
Закрытие для отслеживания в # 882
Самый полезный комментарий
@ Yenthe666 - Добавить функцию достаточно просто, поэтому мы продолжим и реализуем это. Это также поможет в наших средах разработки, которые не имеют такой безопасности, как наши продукты.
В качестве примечания, я не рекомендую конфигурацию, которая разрешает пользователю Odoo доступ на запись к файлам, которые ему явно не нужно записывать. Это общий вектор атаки для других CMS, таких как Wordpress и Magento, поэтому я чувствую, что здесь будет то же самое. Обычно, если злоумышленник получает контроль над Odoo, он может внедрить вредоносный код в места, куда вы бы никогда не заглянули.