Можно ли обновить Odoo.sh из промежуточной базы данных?

Кто-нибудь знает, можно ли обновить промежуточную базу данных odoo.sh через форму загрузки отсюда? https://upgrade.odoo.com/#odoosh

Служба обновления Odoo.sh сообщает, что БД, используемая для обновления, взята из последней рабочей ежедневной автоматической резервной копии, и при каждой фиксации в процессе она восстанавливается из одной и той же резервной копии.

Подробности об услуге обновления Odoo.sh

Проблема в том, что в моей производственной ветке есть специальные модули, которые создают проблемы совместимости с новой версией (от Odoo 14 до Odoo 16), но мы не можем удалить их из производства, потому что они работают и нужны на данный момент, поэтому мы хотите удалить модули из промежуточной версии, обновить ее и решить проблемы совместимости с каждым модулем по отдельности... возможно ли это? Или есть лучший способ решить эту проблему?

Проблемы совместимости связаны с устаревшими моделями и тому подобным.

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

А вы заглядывали в официальную документацию?

CZoellner 11.10.2023 17:58

@CZoellner да, я это сделал, но официальная документация не помогает решить мою проблему с пользовательскими модулями. Я даже просил помощи в билетах с odoo

SallySalty 11.10.2023 21:52

Обычно мы обновляем базы данных со всем установленным, даже для модулей, для которых у odoo нет кода. Помимо некоторых типичных проблем с Postgres или некоторых мелочей в самом odoo, у нас никогда не возникало проблем с этим. После того, как мы получим обновленную базу данных, мы обновим наше оборудование и очистим старое. Итак, какие большие проблемы возникают при обновлении «производственной» базы данных (этап тестирования)?

CZoellner 12.10.2023 11:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Перепробовав множество альтернатив, я могу сказать вам, что лучший способ — использовать обновление внутри Odoo.sh. Во время этого процесса вы можете получить информацию о проблеме из журнала обновления и соответствующим образом шаг за шагом исправить свои пользовательские модули:

log-issue-1 -> fix-1 -> git push-> log-issue-2 -> fix-2 -> git push ... и т.д.

Чтобы исправить проблемы, о которых сообщается в журнале, вы можете использовать скрипты migrations/pre-migrate.py, post-migrate.py, end-migrate.py (документация: https://readthedocs.org/projects/oopgrade/downloads/pdf/latest/ ), чтобы адаптировать ваши модели и представления ваших пользовательских модели, используя библиотеку OpenUpgrade: https://pypi.org/project/openupgradelib/

Чтобы установить его в свой проект, добавьте openupgradelib в файл require.txt, а затем запустите команду bash:

pip3 install -r requirements.txt

Доступные функции этой библиотеки:

add_ir_model_fields()
bump_major()
bump_minor()
bump_patch()
change_column_type()
column_exists()
delete_model_workflow()
drop_columns()
get_foreign_keys()
install_modules()
load_data()
oopgrade.oopgrade
oopgrade.version
rename_columns()
rename_tables()
set_defaults()
set_stored_function()
table_exists()
update_module_names()

Документация по этой библиотеке: https://oca.github.io/openupgradelib/installation.html

Чтобы узнать, как использовать функции openupgradelib, вы можете найти хорошие примеры использования здесь (open-upgrade): https://github.com/OCA/OpenUpgrade/blob/15.0/openupgrade_scripts/scripts/website_sale/15.0.1.1/post-migration.py


from openupgradelib import openupgrade


def update_xpath_for_product_custom_text(env):
    """Look for custom views website_sale.product_custom_text and update the content hook"""
    for view in env["ir.ui.view"].search(
        [
            ("key", " = ", "website_sale.product_custom_text"),
            ("website_id", "! = ", False),
        ]
    ):
        view.arch_db = view.arch_db.replace(
            "expr=\"//div[@id='product_details']\"",
            "expr=\"//div[@id='o_product_terms_and_share']\"",
        )


def set_visibility_product_attribute(env):
    # Check that website_sale_product_attribute_filter_visibility was installed
    if not openupgrade.column_exists(env.cr, "product_attribute", "is_published"):
        return
    openupgrade.logged_query(
        env.cr,
        """
        UPDATE product_attribute
        SET visibility = CASE WHEN is_published is not true THEN 'hidden'
                              ELSE 'visible'
                              END
        """,
    )


def enable_price_filter_view(env):
    """If you had website_sale_attribute_filter_price module installed in previous
    version, replace it by the new core price filter.
    """
    for website in env["website"].search([]):
        view = env["ir.ui.view"].search(
            [
                ("key", " = ", "website_sale_attribute_filter_price.pricefilter"),
                ("website_id", " = ", website.id),
            ]
        )
        if view:
            # It's important to set the context to create the new view related to the
            # current website. See write method of ir.ui.view in website module
            website.with_context(website_id=website.id).viewref(
                "website_sale.filter_products_price"
            ).active = True
            view.unlink()


@openupgrade.migrate()
def migrate(env, version):
    # Load noupdate changes
    openupgrade.load_data(
        env.cr,
        "website_sale",
        "15.0.1.1/noupdate_changes.xml",
    )
    openupgrade.delete_record_translations(
        env.cr,
        "website_sale",
        [
            "mail_template_sale_cart_recovery",
        ],
    )
    set_visibility_product_attribute(env)
    enable_price_filter_view(env)
    update_xpath_for_product_custom_text(env)

Спасибо! Я предложу это своей команде! Кстати, могу ли я удалить модули через pre-migrate.py? Просто спрашиваю на случай, если моя команда все равно решит временно удалить их.

SallySalty 10.10.2023 16:49

пожалуйста, рассмотрите возможность проголосовать за мой пост :-)

sylvain 10.10.2023 17:02

Чтобы удалить модуль программно, вы можете использовать этот код в файле миграции/end-migrate.py: env['ir.module.module'].search([('name', '=', 'your_custom_module_name')] ).button_immediate_uninstall()

sylvain 11.10.2023 10:09

Зачем вам использовать OpenUpgrade, имея подписку Enterprise?

CZoellner 11.10.2023 17:55

Чтобы использовать функции для миграции моих пользовательских модулей... Или у вас есть лучшее решение?

sylvain 11.10.2023 18:08

Другие вопросы по теме