Кто-нибудь знает, можно ли обновить промежуточную базу данных odoo.sh через форму загрузки отсюда? https://upgrade.odoo.com/#odoosh
Служба обновления Odoo.sh сообщает, что БД, используемая для обновления, взята из последней рабочей ежедневной автоматической резервной копии, и при каждой фиксации в процессе она восстанавливается из одной и той же резервной копии.
Подробности об услуге обновления Odoo.sh
Проблема в том, что в моей производственной ветке есть специальные модули, которые создают проблемы совместимости с новой версией (от Odoo 14 до Odoo 16), но мы не можем удалить их из производства, потому что они работают и нужны на данный момент, поэтому мы хотите удалить модули из промежуточной версии, обновить ее и решить проблемы совместимости с каждым модулем по отдельности... возможно ли это? Или есть лучший способ решить эту проблему?
Проблемы совместимости связаны с устаревшими моделями и тому подобным.
Я пробовал деинсталлировать и удалять модули из промежуточной ветки, но в производственной базе данных они по-прежнему остаются «установленными» при каждой попытке обновления, поэтому обновление каждый раз завершается сбоем.
@CZoellner да, я это сделал, но официальная документация не помогает решить мою проблему с пользовательскими модулями. Я даже просил помощи в билетах с odoo
Обычно мы обновляем базы данных со всем установленным, даже для модулей, для которых у odoo нет кода. Помимо некоторых типичных проблем с Postgres или некоторых мелочей в самом odoo, у нас никогда не возникало проблем с этим. После того, как мы получим обновленную базу данных, мы обновим наше оборудование и очистим старое. Итак, какие большие проблемы возникают при обновлении «производственной» базы данных (этап тестирования)?





Перепробовав множество альтернатив, я могу сказать вам, что лучший способ — использовать обновление внутри 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? Просто спрашиваю на случай, если моя команда все равно решит временно удалить их.
пожалуйста, рассмотрите возможность проголосовать за мой пост :-)
Чтобы удалить модуль программно, вы можете использовать этот код в файле миграции/end-migrate.py: env['ir.module.module'].search([('name', '=', 'your_custom_module_name')] ).button_immediate_uninstall()
Зачем вам использовать OpenUpgrade, имея подписку Enterprise?
Чтобы использовать функции для миграции моих пользовательских модулей... Или у вас есть лучшее решение?
А вы заглядывали в официальную документацию?