Обновление Weblate

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

В официальный образ Docker’а (смотрите раздел Установка с помощью Docker’а) уже интегрированы все шаги для обновления Weblate. Обычно вручную делать ничего не надо, за исключением извлечения последней версии.

Общие инструкции по обновлению

Перед обновлением, пожалуйста, проверьте текущие зависимости программного обеспечения, поскольку они могли измениться. После того, как все зависимости будут установлены или обновлены, пожалуйста, приведите свой файл настроек settings.py в соответствие с изменениями в конфигурации (правильные значения смотрите в settings_example.py).

Перед обновлением всегда проверяйте инструкции для конкретных версий. Если вы пропустили какие-то версии, пожалуйста, при обновлении проследуйте инструкциям для всех версий, которые вы пропустили. Иногда, чтобы обеспечить плавный переход, лучше сперва обновиться до какой-нибудь промежуточной версии. Обновление через несколько версий должно работать, но оно протестировано не так хорошо, как обновление на одну версию.

Примечание

Перед обновлением рекомендуется выполнить полное резервное копирование базы данных, чтобы её можно было откатить в случае неудачи обновления, смотрите раздел Резервное копирование и перенос Weblate.

  1. Остановите процессы wsgi и Celery. Обновление может выполнять несовместимые изменения в базе данных, поэтому во время обновления всегда безопаснее избегать выполнения старых процессов.

  2. Обновите код Weblate.

    При установке через pip это можно сделать следующим образом:

    pip install -U "Weblate[all]==version"
    

    Or, if you just want to get the latest released version:

    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 был изменён, чтобы разрешать сообщать об ограничении частоты запросов к API.

  • Появились новые зависимости и обновились старые.

  • Произошло изменение параметра 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 больше не включают ведущую точку. Строки корректируются во время миграции базы данных, но может понадобиться откорректировать внешние компоненты, если вы полагались на значения ключей после экспорта или в API.

  • Настройки Celery были изменены: очередь memory более не используется. Пожалуйста, подправьте свои скрипты запуска и значение параметра CELERY_TASK_ROUTES.

  • Домен Weblate’а теперь настраивается через параметры, смотрите описание параметра SITE_DOMAIN (или переменной окружения WEBLATE_SITE_DOMAIN). Перед запуском Weblate их необходимо настроить.

  • Имена пользователей и адреса электронной почты в базе данных теперь уникальны независимо от регистра. Ранее из-за ошибки и особенностей PostgreSQL имена и адреса с разным регистром символов считались одинаковыми.

Обновление с версии 4.2 до версии 4.3

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

Заметные изменения конфигурации или зависимостей:

  • В проверках качества произошли некоторые изменения, возможно, вы захотите включить их, если вы изменяли параметр CHECK_LIST.

  • Атрибут «исходный язык» перемещён из проекта в компонент, что также затронуло API. Вам нужно будет обновить клиента Weblate, если вы используете оный.

  • Миграция базы данных на версию 4.3 также может занять значительное количество времени (в зависимость от количества строк, которые вы переводите). Стоит ожидать, что миграция будет занимать примерно один час на каждые 100 000 исходных строк.

  • Произошло изменение параметра 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

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

Заметные изменения конфигурации или зависимостей:

  • Если у вас есть большие глоссарии, миграция может занять значительное время.

  • Глоссарии теперь хранятся как обычные компоненты.

  • API глоссария удалён, для доступа к глоссариям используйте стандартный API перевода.

  • Параметр INSTALLED_APPS измененён: к нему надо добавить weblate.metrics.

Изменено в версии 4.5.1:

  • Появилась новая зависимость от модуля pyahocorasick.

Обновление с версии 4.5 до версии 4.6

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

Заметные изменения конфигурации или зависимостей:

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

  • API для создания компонентов теперь автоматически использует Внутренние URL-адреса 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 или новее.

  • The implementation of По-проектная настройка доступа has changed, removing the project prefix from the group names. This affects API users.

  • Weblate теперь использует модуль charset-normalizer вместо chardet для определения кодировки символов.

  • Changed in 4.11.1: There is a change in REST_FRAMEWORK setting (removal of one of the backends in DEFAULT_AUTHENTICATION_CLASSES).

Обновление с версии 4.11 на 4.12

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

  • Никаких особых действий не требуется.

Обновление с версии 4.12 на 4.13

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

Обновление с версии 4.13 на 4.14

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

  • The Java formatting checks now match GNU gettext flags. The flags set in Weblate will be automatically migrated, but third-party scripts will need to use java-printf-format instead of java-format and java-format instead of java-messageformat.

  • The jellyfish dependency has been replaced by rapidfuzz.

  • Changed in 4.14.2: Deprecated insecure configuration of VCS service API keys via _TOKEN/_USERNAME configuration instead of _CREDENTIALS list. In Docker, please add matching _HOST directive. For example see WEBLATE_GITHUB_HOST and GITHUB_CREDENTIALS.

Обновление с версии 4.14 на 4.15

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

  • Weblate now requires btree_gin extension in PostgreSQL. The migration process will install it if it has sufficient privileges. See Создание базы данных в PostgreSQL for manual setup.

  • The Docker image no longer enables debug mode by default. In case you want it, enable it in the environment using WEBLATE_DEBUG.

  • The database migration make take hours on larger instances due to recreating some of the indexes.

  • Changed in 4.15.1: The default value for DEFAULT_PAGINATION_CLASS in rest framework settings was changed.

Upgrade from 4.15 to 4.16

Для выполнения обновления, пожалуйста, следуйте общим инструкциям по обновлению.

  • Celery beat is now stroring the tasks schedule in the database, CELERY_BEAT_SCHEDULER and INSTALLED_APPS need to be changed for that.

Обновление с Python 2 на Python 3

Weblate больше не поддерживает Python старее версии 3.6. В случае, если вы всё ещё работаете на более старой версии, пожалуйста, сначала выполните миграцию на Python 3 на существующей версии и обновите её только после перехода. Смотрите раздел Обновление с 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, а затем импортировать его, используя команду Django importusers.