升级 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 的版本,每次升级时还应该重新生成 locale 文件。可以通过调用后面的来进行:

    weblate compilemessages
    
  8. 验证您的设置合理(还请参见 生产设置):

    weblate check --deploy
    
  9. 重新启动 celery worker (请参见 使用 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 中有一些更改。

  • DeepL 机器翻译现在默认为 v2 API,在你当前的 DeepL 订购不支持的情况下,会需要调整 MT_DEEPL_API_VERSION

从 4.1 升级到 4.2

请按照 一般的升级指示 来执行升级。

显著的配置与依赖性更改:

  • 从 3.x 发布版本升级不再支持,请首先升级到 4.0 或 4.1。

  • 有几个新的且更新的要求。

  • settings_example.py 中有几项更改,最显著的是新中间件和更改的应用订购。

  • 基于 JSON 格式的密钥是不再包括前导的点。在数据库迁移过程中调整字符串,但在你依赖于导出或 API 中的密钥时,外部组件会需要调整。

  • Celery 配置更改,不再使用 memory 队列。请调整你的启动脚本和 CELERY_TASK_ROUTES 设置。

  • 现在在设置中配置 Weblate 域,请参见 SITE_DOMAIN`(或 :envvar:`WEBLATE_SITE_DOMAIN)。在运行 Weblate 前你将不得不配置它。

  • 用户数据库上的用户名和电子邮件字段现在应该不因为大小写敏感而不同。它之前错误地没有被 PostgreSQL 强制。

从 4.2 升级到 4.3

请按照 一般的升级指示 来执行升级。

显著的配置与依赖性更改:

  • 在质量检查中有一些更改,在你调整 CHECK_LIST 的情况下会想将他们包括进来。

  • 源语言属性从项目移动到 API 中暴露的组件。在使用时你会需要更新 Weblate 客户端

  • 根据翻译的字符串数量,数据库迁移到 4.3 会花费很长时间(期望每 10 万个字符串的迁移时间大约为 1 小时)。

  • INSTALLED_APPS 中有一些更改。

  • 有个新的设置 SESSION_COOKIE_AGE_AUTHENTICATED,补充了 SESSION_COOKIE_AGE

  • 在使用 hub`或 :command:`lab`与 GitHub 或GitLab 集成的情况下,需要重新配置它,请参见 :setting:`GITHUB_CREDENTIALSGITLAB_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 现在当出现时使用 msgidmsgctxt。这将改变此类文件中翻译字符串的标识,破坏到 Weblate 扩展数据,如截图或审查状态,的链接。请确保在升级之前提交对此类文件的待处理更改,并且建议你强制加载受影响的组件,方法是使用 loadpo

  • 增加了 translate-toolkit 的最低需求版本,来处理几个文件格式问题。

从 4.4 升级到 4.5

请按照 一般的升级指示 来执行升级。

显著的配置与依赖性更改:

  • The migration might take considerable time if you had big glossaries.

  • Glossaries are now stored as regular components.

  • The glossary API is removed, use regular translation API to access glossaries.

  • :setting:`django:INSTALLED_APPS`中有一处更改, - ``weblate.metrics``应被添加。

    在 4.5.1 版更改:
  • There is a new dependency on the pyahocorasick module.

从 4.5 升级到了 4.6

请按照 一般的升级指示 来执行升级。

显著的配置与依赖性更改:

  • 有几个新的文件格式,在修改 WEBLATE_FORMATS 的情况下,你会想要将他们包括进来。

  • 创建组件的 API 现在自动使用 Weblate internal URLs,见:http:post:/api/projects/(string:project)/components/

  • There is a change in dependencies and PASSWORD_HASHERS to prefer Argon2 for passwords hashing.

从 Python 2 升级到 Python 3

Weblate 不再支持早于 3.5 版本的 Python。在仍然运行在较早版本的情况下,请首先在现有版本上执行到 Python 3 的迁移,并在后面进行升级。请参见 Upgrading from Python 2 to Python 3 in the Weblate 3.11.1 documentation

从其它数据库迁移到 PostgreSQL

如果在 PostgreSQL 以外的数据库上运行 Weblate,你应该迁移到 PostgreSQL,因为它是 4.0 发布版本唯一支持的数据库后端。后面的步骤将引导你在数据库之间迁移数据。请记住迁移前要停止 web 和 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 -O weblate weblate

使用 Django JSON 转储来迁移

最简单的迁移方法是使用 Django JSON 转储。这对于较小的安装工作得很好。在更大的网站,你会想要使用 pgloader 代替,请参见 使用 pgloader 迁移到 PostgreSQL

  1. 添加 PostgreSQL 作为到 :file:`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. 运行迁移,并将任何插入到表格中的数据 drop 掉:

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 数据库运行了。

使用 pgloader 迁移到 PostgreSQL

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 将他们导入。