升级 Weblate
Docker 镜像升级
官方 Docker 镜像(请参见 使用 Docker 安装)已经将所有升级步骤集成了。除了拉取最新的版本外没有手动步骤。
一般的升级指示
在升级前,请检查当前的 软件要求,因为他们可能被更改。一旦所有的要求被安装或升级,请调整你的 settings.py
,来匹配配置中的更改(正确的值请咨询 settings_example.py
)。
升级前,请务必查阅 与特定版本相关的指示。如果您要跳过某些版本,请按照升级中要跳过的所有版本的说明进行操作。有时最好先升级到某个中间版本,以确保顺利迁移。跨越多个版本的升级应该是可行的,但不像单一版本的升级那样经过良好的测试。
注解
推荐在升级前执行全数据库备份,使你可以在升级失败的情况下回滚数据库,请参见 备份和移动 Weblate。
停止 WSGI 和 Celery 进程。升级可能执行数据库的不兼容更改,因此在升级中避免旧的进程运行总是安全的。
升级 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
New Weblate release might have new 可选依赖项, please check if they cover features you want.
升级配置文件,所需的步骤请参考
settings_example.py
或 与特定版本相关的指示。升级数据库架构:
weblate migrate --noinput
收集升级的静态文件(请参见 运行服务器 和 为静态文件提供服务):
weblate collectstatic --noinput --clear
压缩 JavaScript 和 CSS 文件(可选步骤,请参见 压缩客户资产 ):
weblate compress
如果你运行来自 Git 的版本,每次升级时还应该重新生成 locale 文件。可以通过调用后面的来进行:
weblate compilemessages
验证您的设置合理(还请参见 生产设置):
weblate check --deploy
重新启动 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 newMT_DEEPL_API_URL
instead. You might need to adjustMT_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
。如果你使用 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
请按照 一般的升级指示 来执行升级。
显著的配置与依赖项更改:
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. TheMT_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.
参见
从 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,因为 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。
将 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": "",
},
}
运行迁移,并将任何插入到表格中的数据 drop 掉:
weblate migrate --database=postgresql
weblate sqlflush --database=postgresql | weblate dbshell --database=postgresql
将遗留数据库进行转储,并导入 PostgreSQL
weblate dumpdata --all --output weblate.json
weblate loaddata weblate.json --database=postgresql
调整
DATABASES
而只使用 PostgreSQL 数据库作为默认,将遗留连接删除掉。
现在 Weblate 应该准备好从 PostgreSQL 数据库运行了。
使用 pgloader 迁移到 PostgreSQL
pgloader 是通用迁移工具,将数据迁移到 PostgreSQL。你可以使用它来迁移 Weblate 数据库。
调整 settings.py 文件而将 PostgreSQL 用作数据库。
迁移 PostgreSQL 中的模式:
weblate migrate weblate sqlflush | weblate dbshell
运行 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
将他们导入。