Оновлення Weblate

Оновлення образу Docker

До офіційного образу Docker (див. install/docker) інтегровано усі кроки оновлення. Кроків, які слід виконати вручну, окрім отримання коду найсвіжішої версії, немає.

Загальні настанови щодо оновлення

Перш ніж оновлювати програми, будь ласка, ознайомтеся із поточними вимогами, оскільки їх могло бути змінено. Щойно усі потрібні пакунки буде встановлено або оновлено, будь ласка, скоригуйте ваш settings.py так, щоб він відповідав змінам у налаштуваннях (зверніться до settings_example.py, щоб дізнатися більше про правильні значення).

Завжди ознайомлюйтеся із настановами щодо специфіки версії до оновлення. Якщо ви пропустили декілька попередніх версій, будь ласка, виконайте настанови для усіх версій, які ви пропускаєте при оновленні. Іноді краще оновитися до проміжної версії, щоб забезпечити безпроблемне перенесення даних. Оновлення із пропусканням декількох випусків мають працювати, але їхня перевірка на коректність виконується набагато менш ретельно, ніж перевірка оновлень без пропускання версій.

Примітка

До оновлення рекомендуємо вам створити повну резервну копію бази даних, щоб ви могли повернутися до попереднього стану бази даних, якщо не вдасться виконати оновлення, див. Резервне копіювання і пересування Weblate.

  1. Зупиніть процеси wsgi і Celery. Оновлення може призвести до несумісних змін у базі даних, тому завжди безпечніше, якщо під час оновлення застарілі процеси не працюватимуть.

  2. Оновіть код Weblate.

    Для встановлень за допомогою pip цього можна досягти такою командою:

    pip install -U "Weblate[all]"
    

    Якщо ви не хочете встановлювати усі необов’язкові залежності, зробіть так:

    pip install -U Weblate
    

    Якщо ви працюєте із копією з Git, вам слід отримати новий початковий коді і оновити встановлену у вас версію:

    cd weblate-src
    git pull
    # Update Weblate inside your virtualenv
    . ~/weblate-env/bin/pip install -e .
    # Install dependencies directly when not using virtualenv
    pip install --upgrade -r requirements.txt
    # Install optional dependencies directly when not using virtualenv
    pip install --upgrade -r requirements-optional.txt
    
  3. У нового випуску Weblate можуть бути нові необов’язкові залежності. Будь ласка, перевірте, чи забезпечують вони роботу потрібних вам можливостей.

  4. Оновіть файл налаштувань. Зверніться до файла settings_example.py або специфічних для випуску настанов, щоб ознайомитися із потрібними для цього діями.

  5. Оновіть структуру бази даних:

    weblate migrate --noinput
    
  6. Зберіть оновлені статичні файли (див. Запуск сервера і Обслуговування статичних файлів):

    weblate collectstatic --noinput --clear
    
  7. Стисніть файли JavaScript і CSS (необов’язково, див. Стиснення клієнтських даних):

    weblate compress
    
  8. Якщо ви працюєте із версією з Git, вам слід також повторно створювати файли локалей кожного разу після оновлення. Зробити це можна за допомогою такої команди:

    weblate compilemessages
    
  9. Перевірте, чи є працездатною ваша конфігурація (див. також Промислові налаштування):

    weblate check --deploy
    
  10. Перезапустіть засіб обробки Celery (див. Фонові завдання з використанням Celery).

Специфічні для версій настанови

Оновлення з версії 2.x

Якщо ви оновлюєте систему з версії 2.x, завжди спочатку оновіться до версії 3.0.1, а потім продовжіть оновлення у межах послідовності версій 3.x. Оновлення, у яких пропущено цей крок, вважаються непідтримуваними — вони не працюватимуть як слід.

Оновлення з версії 3.x

Якщо ви оновлюєте систему з версії 3.x, завжди спочатку оновіться до версії 4.0.4 або 4.1.1, а потім продовжіть оновлення у межах послідовності версій 4.x. Оновлення, у яких пропущено цей крок, вважаються непідтримуваними — вони не працюватимуть як слід.

Оновлення з 4.0 до 4.1

Будь ласка, виконайте настанови із розділу Загальні настанови щодо оновлення для виконання оновлення.

Помітні зміни у налаштуваннях або залежностях:

  • До settings_example.py внесено декілька змін. Найпомітнішими є зміна проміжного програмного забезпечення. Будь ласка, скоригуйте параметри відповідним чином.

  • Передбачено нові формати файлів. Можливо, вам варто включити їх до списку зміненого WEBLATE_FORMATS.

  • Передбачено нові перевірки якості. Можливо, вам варто включити їх до списку зміненого CHECK_LIST.

  • Змінено параметр DEFAULT_THROTTLE_CLASSES так, щоб уможливити звітування щодо обмеження частоти у програмному інтерфейсі.

  • Маємо деякі нові і оновлені вимоги щодо програмного забезпечення.

  • Змінено INSTALLED_APPS.

  • Параметр MT_DEEPL_API_VERSION було вилучено у версії 4.7. Замість нього для рушія комп’ютерного перекладу DeepL використано новий параметр MT_DEEPL_API_URL. Можливо, вам доведеться скоригувати MT_DEEPL_API_URL відповідно до параметрів вашої передплати.

Оновлення з 4.1 до 4.2

Будь ласка, виконайте настанови із розділу Загальні настанови щодо оновлення для виконання оновлення.

Помітні зміни у налаштуваннях або залежностях:

  • Підтримки оновлення з випусків 3.x більше не передбачено. Будь ласка, спочатку виконайте оновлення до версії 4.0 або 4.1.

  • Маємо деякі нові і оновлені вимоги щодо програмного забезпечення.

  • До settings_example.py внесено декілька змін. Найпомітнішими є нове проміжне програмне забезпечення та зміна порядку виконання програм.

  • Ключі для заснованих на JSON форматів більше не включать початкової крапки. Рядки скориговано під час перенесення бази даних, але зовнішні складники можуть потребувати коригування, якщо ви покладаєтеся на ключі для експортування або використання програмного інтерфейсу.

  • Налаштування Celery змінено так, що у них більше не використовується черга memory. Будь ласка, скоригуйте ваші скрипти запуску та значення параметра CELERY_TASK_ROUTES.

  • Домен Weblate тепер налаштовується у параметрах, див. SITE_DOMAIN (або WEBLATE_SITE_DOMAIN). Вам слід буде налаштувати його до запуску Weblate.

  • Поля імені користувача і адреси електронної пошти у базі даних користувачів тепер мають містити неповторювані текстові дані (регістр символів не береться до уваги). У попередніх версіях це обмеження не було застосовано примусово для PostgreSQL.

Оновлення з 4.2 до 4.3

Будь ласка, виконайте настанови із розділу Загальні настанови щодо оновлення для виконання оновлення.

Помітні зміни у налаштуваннях або залежностях:

  • Передбачено певні зміни у перевірках якості. Можливо, вам варто включити їх до списку зміненого CHECK_LIST.

  • Атрибут початкової мови було перенесено з проєкту до складника, який доступний у програмному інтерфейсі. Вам слід оновити Клієнт Weblate, якщо ви ним користуєтеся.

  • Перенесення бази даних з версії 4.3 може бути тривалим. Тривалість залежить від кількості рядків, переклад яких виконується (очікуваний час для перенесення 100000 початкових рядків складає близько однієї години).

  • Змінено INSTALLED_APPS.

  • Нове налаштування SESSION_COOKIE_AGE_AUTHENTICATED, яке доповнює SESSION_COOKIE_AGE.

  • Якщо ви користувалися hub або lab для інтеграції із GitHub або GitLab, вам слід переналаштувати параметри, див. GITHUB_CREDENTIALS і GITLAB_CREDENTIALS.

Змінено в версії 4.3.1:

  • Налаштування Celery змінено так, щоб додати чергу memory. Будь ласка, скоригуйте ваші скрипти запуску та значення параметра CELERY_TASK_ROUTES.

Змінено в версії 4.3.2:

  • Метод post_update у додатках тепер приймає додатковий параметр skip_push.

Оновлення з 4.3 до 4.4

Будь ласка, виконайте настанови із розділу Загальні настанови щодо оновлення для виконання оновлення.

Помітні зміни у налаштуваннях або залежностях:

  • Змінено INSTALLED_APPS, тут слід додавати weblate.configuration.

  • Тепер потрібен Django 3.1.

  • Якщо ви використовуєте MySQL або MariaDB, підвищено вимоги щодо мінімальних версій, див. MySQL і MariaDB.

Змінено в версії 4.4.1:

  • Одномовний gettext у новій версії використовує одразу msgid і msgctxt, якщо такі поля є. Це змінює ідентифікацію рядків перекладу у відповідних файлах розривання посилань на розширені дані Weblate, такі як знімки екрана або стани розгляду. Будь ласка, переконайтеся, що зміни з черги для таких файлів записано до репозиторію, перш ніж виконувати оновлення. Рекомендуємо примусово завантажити відповідний складник за допомогою loadpo.

  • Збільшено мінімальну обов’язкову версію translate-toolkit для виправлення декількох проблем із форматами файлів.

Оновлення з 4.4 до 4.5

Будь ласка, виконайте настанови із розділу Загальні настанови щодо оновлення для виконання оновлення.

Помітні зміни у налаштуваннях або залежностях:

  • Перехід на нову версію може бути досить тривалим, якщо у вас доволі великі глосарії.

  • Глосарії у новій версії зберігаються як звичайні складники.

  • Вилучено програмний інтерфейс глосаріїв. Для доступу до глосаріїв скористайтеся звичайним програмним інтерфейсом перекладів.

  • Змінено INSTALLED_APPS, тут слід додавати weblate.metrics.

Змінено в версії 4.5.1:

  • Існує нова залежність від модуля pyahocorasick.

Оновлення з 4.5 до 4.6

Будь ласка, виконайте настанови із розділу Загальні настанови щодо оновлення для виконання оновлення.

Помітні зміни у налаштуваннях або залежностях:

  • Передбачено нові формати файлів. Можливо, вам варто включити їх до списку зміненого WEBLATE_FORMATS.

  • У програмному інтерфейсі для створення складників тепер автоматично використовуються Внутрішні адреси Weblate, див. POST /api/projects/(string:project)/components/.

  • Відбулися зміни у залежностях, і PASSWORD_HASHERS тепер пріоритетно використовує Argon2 для хешування паролів.

Оновлення з 4.6 до 4.7

Будь ласка, виконайте настанови із розділу Загальні настанови щодо оновлення для виконання оновлення.

Помітні зміни у налаштуваннях або залежностях:

  • До settings_example.py внесено декілька змін. Найпомітнішими є зміна проміжного програмного забезпечення (MIDDLEWARE). Будь ласка, скоригуйте параметри відповідним чином.

  • Для рушія комп’ютерного перекладу DeepL тепер використовують загальний параметр MT_DEEPL_API_URL з метою гнучкішої адаптації до різних моделей передплати. Використання параметра MT_DEEPL_API_VERSION припинено.

  • Тепер потрібен Django 3.2.

Оновлення з 4.7 до 4.8

Будь ласка, виконайте настанови із розділу Загальні настанови щодо оновлення для виконання оновлення.

У цьому випуску ніяких додаткових кроків із оновлення виконувати не потрібно.

Оновлення з 4.8 до 4.9

Будь ласка, виконайте настанови із розділу Загальні настанови щодо оновлення для виконання оновлення.

  • Метрику зберігання даних змінено. Оновлення для великих сайтів може тривати досить довго.

Оновлення з 4.9 до 4.10

Будь ласка, виконайте настанови із розділу Загальні настанови щодо оновлення для виконання оновлення.

  • Роботу із окремими для проєкту групами змінено. Оновлення для сайтів із тисячами проєктів може тривати досить довго.

  • До Django 4.0 внесено деякі несумісні із попередніми версіями зміни, див. Backwards incompatible changes in 4.0. У поточній версії Weblate усе ще передбачено підтримку Django 3.2, якщо оновлення до сучасної версії є проблематичним. Серед найпомітніших змін, які можуть стосуватися Weblate, такі:

    • Відкинуто підтримку PostgreSQL 9.6 — для роботи Django 4.0 потрібна PostgreSQL 10 або новіша версія.

    • Було змінено формат CSRF_TRUSTED_ORIGINS.

  • У контейнері Docker нової версії використано Django 4.0. Опис змін наведено вище.

Оновлення з 4.10 до 4.11

Будь ласка, виконайте настанови із розділу Загальні настанови щодо оновлення для виконання оновлення.

  • Для роботи Weblate з цієї версії потрібен Python 3.7 або новіша версія.

Оновлення з Python 2 до Python 3

У Weblate більше не передбачено підтримки версій Python, які є старішими за 3.6. Якщо ви все ще працюєте із застарілою версією, будь ласка, виконайте спочатку перенесення даних до Python 3 на наявній версії, а потім виконайте оновлення Weblate. Див. Оновлення з Python 2 до Python 3 у документації до Weblate 3.11.1.

Перенесення даних з інших баз даних до PostgreSQL

Якщо ви працюєте з Weblate на основі бази даних, відмінної від PostgreSQL, вам слід перенести базу даних до PostgreSQL, оскільки із ним Weblate працює оптимально. Нижче наведено список кроків, які слід виконати для перенесення ваших даних з однієї бази даних до іншої. Будь ласка, не забудьте зупинити вебсервер та сервер Celery перед перенесенням даних, інакше дані може бути пошкоджено.

Створення бази даних у PostgreSQL

Зазвичай, варто зробити так, щоб Weblate працював із окремою базою даних і окремим обліковим записом користувача:

# If PostgreSQL was not installed before, set the main password
sudo -u postgres psql postgres -c "\password postgres"

# Create a database user called "weblate"
sudo -u postgres createuser -D -P weblate

# Create the database "weblate" owned by "weblate"
sudo -u postgres createdb -E UTF8 -O weblate weblate

Перенесення даних за допомогою дампів JSON Django

Найпростішим підходом до перенесення є використання дампів JSON Django. Такий спосіб добре працює для малих встановлень. Для більших сайтів вам варто скористатися pgloader, див. Перенесення даних до PostgreSQL за допомогою pgloader.

  1. Додайте PostgreSQL як додаткове з’єднання із базою даних до settings.py:

DATABASES = {
    "default": {
        # Database engine
        "ENGINE": "django.db.backends.mysql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "database.example.com",
        # Set to empty string for default
        "PORT": "",
        # Additional database options
        "OPTIONS": {
            # In case of using an older MySQL server, which has MyISAM as a default storage
            # 'init_command': 'SET storage_engine=INNODB',
            # Uncomment for MySQL older than 5.7:
            # 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            # If your server supports it, see the Unicode issues above
            "charset": "utf8mb4",
            # Change connection timeout in case you get MySQL gone away error:
            "connect_timeout": 28800,
        },
    },
    "postgresql": {
        # Database engine
        "ENGINE": "django.db.backends.postgresql",
        # Database name
        "NAME": "weblate",
        # Database user
        "USER": "weblate",
        # Database password
        "PASSWORD": "password",
        # Set to empty string for localhost
        "HOST": "database.example.com",
        # Set to empty string for default
        "PORT": "",
    },
}
  1. Запустіть перенесення і відкиньте усі дані, які було вставлено до таблиць:

weblate migrate --database=postgresql
weblate sqlflush --database=postgresql | weblate dbshell --database=postgresql
  1. Створіть дамп застарілої бази даних а імпортуйте його до PostgreSQL

weblate dumpdata --all --output weblate.json
weblate loaddata weblate.json --database=postgresql
  1. Скоригуйте DATABASES так, щоб типово використовувалася лише база даних PostgreSQL, вилучіть застаріле з’єднання.

Після цього Weblate має бути готовим для запуску з базою даних PostgreSQL.

Перенесення даних до PostgreSQL за допомогою pgloader

pgloader — типовий інструмент для перенесення даних до PostgreSQL. Ви можете скористатися ним для перенесення бази даних Weblate.

  1. Скоригуйте ваш settings.py так, щоб у ньому було використано базу даних PostgreSQL.

  2. Перенесіть схему до бази даних PostgreSQL:

    weblate migrate
    weblate sqlflush | weblate dbshell
    
  3. Запустіть pgloader для перенесення даних. Наведений нижче скрипт може бути використано для перенесення бази даних, але вам варто докладніше ознайомитися із pgloader, щоб зрозуміти принципи його роботи і скоригувати роботу так, щоб вона відповідала вашій конфігурації:

    LOAD DATABASE
         FROM      mysql://weblate:password@localhost/weblate
         INTO postgresql://weblate:password@localhost/weblate
    
    WITH include no drop, truncate, create no tables, create no indexes, no foreign keys, disable triggers, reset sequences, data only
    
    ALTER SCHEMA 'weblate' RENAME TO 'public'
    ;
    

Перенесення даних з Pootle

Перші версії Weblate було написано як замінник Pootle, тому у програмі передбачено підтримку перенесення облікових записів з Pootle. Ви можете створити дамп записів користувачів з Pootle і імпортувати їх за допомогою importusers.