在 macOS 上安装 Weblate
官方文档:在 macOS 上安装
之所以在官方安装教程之外再写一个教程:
- 主要是记录下安装过程中运行环境的坑
- 官方的虚拟环境命令不太好用
可以结合此教程和官教程来一起看,没有冲突,我会用粗体红色标识出和官方不一样的地方,以下是详细的步骤,介绍如何在macOS上安装和配置Weblate。
-
安装依赖
参考官方教程
pip install virtualenv
此命令可以不执行,替换成下面的执行方式
-
创建虚拟环境
为了避免与系统Python环境冲突,建议使用Python的虚拟环境:
python3 -m venv weblate-env
source weblate-env/bin/activate
-
安装 Weblate
参考官方教程
-
配置 Weblate
参考官方教程
由于官方教程对于配置这块说的不是很清楚,新手在执行weblate migrate
命令时,参考下方安装时遇到的坑
-
创建超级用户
参考官方教程
创建出来的超级用户名称为admin,密码是随机的,可能不好记住。
可以通过 **createadmin --update
**来更新
createadmin --no-password --update // 设置为无密码
createadmin --password 1024 --update // 设置密码为1024
-
初始化 Weblate
参考官方教程
-
启动 Weblate 服务器
参考官方教程
如果要在局域网访问,可以使用命令 weblate runserver 0.0.0.0:8000
安装的坑
执行weblate migrate
命令遇到的坑
以下的错误是按照官方教程步骤执行顺序到weblate migrate
命令执行后出现的坑。
-
ffi.h 头文件无法找到
/usr/local/Cellar/gobject-introspection/1.80.1/include/gobject-introspection-1.0/girffi.h:25:10: fatal error: 'ffi.h' file not found
#include <ffi.h>
^~~~~~~
1 warning and 1 error generated.
ninja: build stopped: subcommand failed.
这个由于每个人的电脑python环境不一样,我的机器是M1, Python 3.9.6,ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin22]
本机解决方案:
brew reinstall pkg-config
-
ImportError: Module "redis.connection" does not define a "HiredisParser" attribute/class
在执行weblate migrate
命令时遇到以上错误。
解决方案:Readme patch to resolve #676 by jacklinke · Pull Request #677 · jazzband/django-redis
修改settings.py
文件中的设置(以下红色粗体为修改部分)
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
# If redis is running on same host as Weblate, you might
# want to use unix sockets instead:
# "LOCATION": "unix:///var/run/redis/redis.sock?db=1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PARSER_CLASS": "redis.connection. _HiredisParser",
# If you set password here, adjust CELERY_BROKER_URL as well
"PASSWORD": None,
"CONNECTION_POOL_KWARGS": {},
},
"KEY_PREFIX": "weblate",
},
-
(weblate.E017) Correct the site domain
HINT: docs.weblate.org/en/weblate-…
解决方案:
在settings.py
文件中,找到SITE_DOMAIN
和ENABLE_HTTPS
两个key。并设置有效的value:
SITE_DOMAIN = "127.0.0.1:8000" /// "weblate.example.com"
ENABLE_HTTPS = True
-
django.db.utils.OperationalError: connection to server at "127.0.0.1", port 5432 failed: Connection refused,Is the server running on that host and accepting TCP/IP connections?
- brew安装
postgresql
确认本地是否有安装postgresql
,如果未安装,可以通过dmg或者brew来安装。
brew install postgresql@15
- 配置并启动PostgreSQL服务
brew services start postgresql@15
- 添加环境变量
echo 'export PATH="/usr/local/Cellar/postgresql@15/15.7/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
- 关联上超级用户
/usr/local/Cellar/postgresql@ 15 / 15.7 / bin /createuser -s postgres
使用brew 安装的,必须要执行上面你的操作,关联上超级用户或者创建一个超级用户
- 创建weblate数据库
我这里使用的是GUI apAdmin4 来创建
- 配置settings.py
安装好之后,使用postgresql创建数据库,然后在settings.py
文件中,找到DATABASES
这个key。并填写刚才创建数据库时的信息:数据库名称,密码:
DATABASES = {
"default": {
# Use "postgresql" or "mysql".
"ENGINE": "django.db.backends.postgresql",
# Database name.
"NAME": "weblate",
# Database user.
"USER": "postgres",
# Name of role to alter to set parameters in PostgreSQL,
# use in case role name is different than user used for authentication.
# "ALTER_ROLE": "weblate",
# Database password.
"PASSWORD": "",
# Set to empty string for localhost.
"HOST": "127.0.0.1",
# Set to empty string for default.
"PORT": "",
# Customizations for databases.
"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'",
# Set emoji capable charset for MySQL:
# "charset": "utf8mb4",
# Change connection timeout in case you get MySQL gone away error:
# "connect_timeout": 28800,
},
# Persistent connections
"CONN_MAX_AGE": 0,
# Disable server-side cursors, might be needed with pgbouncer
"DISABLE_SERVER_SIDE_CURSORS": False,
}
}
-
Error 61 connecting to 127.0.0.1:6379. Connection refused.
如果本地没有安装redis
,请按照官方文档安装redis
,如果已安装,需要在后台打开redis服务,在终端执行:
redis-server
OK,走完了上面的五个坑,至此,完成了官方文档上weblate migrate
命令的执行。
执行 weblate runserver
命令遇到的坑
-
You're accessing the development server over HTTPS, but it only supports HTTP.
提示本地的服务无法处理https请求。
解决方案有两种,一种是在settings.py
文件中禁用https,还有一种是支持本地服务的https请求(太麻烦了)。
这里说明第一种,打开settings.py
,找到ENABLE_HTTPS
key, 设置其value值为false
ENABLE_HTTPS = False
如果之前访问过localhost:8000,那么需要清理网站缓存,然后再次运行,这个时候完整的url就从https变成了http
直接访问端口,使用http://localhost:8000/ 访问即可,访问成功