Обновление Weblate

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

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

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

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

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

Примечание

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

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

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

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

    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
    
  3. Обновите файл настроек, пример смотрите в settings_example.py или обратитесь к разделу Инструкции для конкретных версий для получения информации о необходимых шагах.

  4. Обновите структуру базы данных:

    weblate migrate --noinput
    
  5. Соберите обновленные статические файлы (смотрите разделы Запуск сервера и Обслуживание статических файлов):

    weblate collectstatic --noinput
    
  6. Сожмите файлы JavaScript и CSS (необязательно, смотрите раздел Сжатие клиентских ресурсов):

    weblate compress
    
  7. Если вы используете версию из Git’а, вам также при каждом обновлении следует заново сгенерировать файлы локалей. Вы можете сделать это, выполнив следующую команду:

    weblate compilemessages
    
  8. Убедитесь, что ваша установка в порядке (также смотрите раздел Рабочая среда):

    weblate check --deploy
    
  9. Restart Celery worker (see Фоновые задачи с использованием 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, такие как снимки экрана или состояния обзора. Перед обновлением убедитесь, что вы закоммитили изменения в таких файлах; рекомендуется также провести принудительную перезагрузку затронутых компонентов с помощью команды Django 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.

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

Weblate больше не поддерживает Python старше версии 3.5. В случае, если вы все еще работаете на более старой версии, пожалуйста, сначала выполните миграцию на 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.