Обновление Weblate#

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

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

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

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

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

Примечание

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

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

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

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

    pip install -U "Weblate[all]==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 '.[all]'
    # 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).

Инструкции для конкретных версий#

Изменено в версии 5.0: Инструкции для конкретной версии теперь включены в примечания к выпуску, см. Weblate 5.0.2.

Обновление со старой основной версии#

Обновления основных версий не поддерживаются. Всегда обновляйте версию исправления до последней версии для первоначального основного выпуска. Обновления, пропускающие этот шаг, не поддерживаются и не будут работать.

При обновлении версии 2.x всегда сначала обновляйтесь до версии 3.0.1, а затем продолжайте обновление в рамках серии 3.x.

При обновлении версии 3.x всегда сначала обновляйтесь до версии 4.0.4, а затем продолжайте обновление в рамках серии 4.x.

Переход с других баз данных на 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.