升级 Weblate

Docker 镜像升级

官方 Docker 镜像(请参见 使用 Docker 安装)已集成了所有 Weblate 升级步骤。除了拉取最新的版本外通常无需进行手动操作。

一般的升级指示

在升级前,请检查当前的 软件要求,因为他们可能被更改。一旦所有的要求被安装或升级,请调整你的 settings.py,来匹配配置中的更改(正确的值请咨询 settings_example.py)。

升级前,请务必查阅 与特定版本相关的指示。如果您要跳过某些版本,请按照升级中要跳过的所有版本的说明进行操作。有时最好先升级到某个中间版本,以确保顺利迁移。跨越多个版本的升级应该是可行的,但不像单一版本的升级那样经过良好的测试。

备注

推荐在升级前执行全数据库备份,使你可以在升级失败的情况下回滚数据库,请参见 备份和移动 Weblate

  1. 停止 WSGI 和 Celery 进程。升级可能执行数据库的不兼容更改,因此在升级中避免旧的进程运行总是安全的。

  2. 升级 Weblate 代码。

    对于 pip 安装,可以通过后面的来实现:

    pip install -U "Weblate[all]"
    

    If you don’t want to install all of the optional dependencies do:

    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. New Weblate release might have new 可选依赖项, please check if they cover features you want.

  4. 升级配置文件,所需的步骤请参考 settings_example.py与特定版本相关的指示

  5. 升级数据库架构:

    weblate migrate --noinput
    
  6. 收集升级的静态文件(请参见 运行服务器为静态文件提供服务):

    weblate collectstatic --noinput --clear
    
  7. 压缩 JavaScript 和 CSS 文件(可选步骤,请参见 压缩客户端资源 ):

    weblate compress
    
  8. 如果你运行来自 Git 的版本,每次升级时还应该重新生成 locale 文件。可以通过调用后面的来进行:

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

    weblate check --deploy
    
  10. 重新启动 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 中有一些更改。

  • The MT_DEEPL_API_VERSION setting has been removed in Version 4.7. The DeepL machine translation now uses the new MT_DEEPL_API_URL instead. You might need to adjust MT_DEEPL_API_URL to match your subscription.

从 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

  • 如果你使用 hublab 与 GitHub 或 GitLab 集成,则需要重新配置,请参见 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.

  • 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.

从 4.6 升级到了 4.7

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

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

  • settings_example.py 中有几项更改,最显著的是中间件的更改(MIDDLEWARE),请由此调整你的设置。

  • The DeepL machine translation now has a generic MT_DEEPL_API_URL setting to adapt to different subscription models more flexibly. The MT_DEEPL_API_VERSION setting is no longer used.

  • 现在需要 Django 3.2。

从 4.7 升级到 4.8

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

此版本中不需要额外的升级步骤。

从 4.8 升级到 4.9

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

  • There is a change in storing metrics, the upgrade can take long time on larger sites.

从 4.9 升级到 4.10

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

  • There is a change in per-project groups, the upgrade can take long time on sites with thousands of projects.

  • Django 4.0 has made some incompatible changes, see Backwards incompatible changes in 4.0. Weblate still supports Django 3.2 for now, in case any of these are problematic. Most notable changes which might affect Weblate:

    • 去掉了对 PostgreSQL 9.6 的支持,Django 4.0 支持 PostgreSQL 10 及以上版本。

    • Format of CSRF_TRUSTED_ORIGINS was changed.

  • The Docker container now uses Django 4.0, see above for changes.

从 4.10 升级到 4.11

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

  • Weblate 现在需要 Python 3.7 或更新版本。

从 Python 2 升级到 Python 3

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

从其它数据库迁移到 PostgreSQL

如果在 PostgreSQL 以外的数据库上运行 Weblate,你应该考虑迁移到 PostgreSQL,因为 Weblate 与它搭配表现最佳。后面的步骤将引导你在数据库之间迁移数据。请记住迁移前要停止 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 -E UTF8 -O weblate weblate

使用 Django JSON 转储来迁移

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

  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. 运行迁移,并将任何插入到表格中的数据 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 将其导入。