Weblate 在M1 上安装(小白教程)

554 阅读4分钟

在 macOS 上安装 Weblate

官方文档:在 macOS 上安装

之所以在官方安装教程之外再写一个教程:

  1. 主要是记录下安装过程中运行环境的坑
  2. 官方的虚拟环境命令不太好用

可以结合此教程和官教程来一起看,没有冲突,我会用粗体红色标识出和官方不一样的地方,以下是详细的步骤,介绍如何在macOS上安装和配置Weblate。

  1. 安装依赖

参考官方教程

pip install virtualenv此命令可以不执行,替换成下面的执行方式

  1. 创建虚拟环境

为了避免与系统Python环境冲突,建议使用Python的虚拟环境:

python3 -m venv weblate-env
source weblate-env/bin/activate
  1. 安装 Weblate

参考官方教程

  1. 配置 Weblate

参考官方教程

由于官方教程对于配置这块说的不是很清楚,新手在执行weblate migrate命令时,参考下方安装时遇到的坑

  1. 创建超级用户

参考官方教程

创建出来的超级用户名称为admin,密码是随机的,可能不好记住。

可以通过 **createadmin --update**来更新

createadmin --no-password --update  // 设置为无密码
createadmin --password 1024 --update // 设置密码为1024
  1. 初始化 Weblate

参考官方教程

  1. 启动 Weblate 服务器

参考官方教程

如果要在局域网访问,可以使用命令 weblate runserver 0.0.0.0:8000

安装的坑

执行weblate migrate命令遇到的坑

以下的错误是按照官方教程步骤执行顺序到weblate migrate命令执行后出现的坑。

  1. 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
  1. 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",
    },
  1. (weblate.E017) Correct the site domain

HINT: docs.weblate.org/en/weblate-…

解决方案:

settings.py文件中,找到SITE_DOMAINENABLE_HTTPS两个key。并设置有效的value:

SITE_DOMAIN = "127.0.0.1:8000"  /// "weblate.example.com"
ENABLE_HTTPS = True
  1. 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?

  1. brew安装postgresql

确认本地是否有安装postgresql,如果未安装,可以通过dmg或者brew来安装。

brew install postgresql@15
  1. 配置并启动PostgreSQL服务
brew services start postgresql@15
  1. 添加环境变量
echo 'export PATH="/usr/local/Cellar/postgresql@15/15.7/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
  1. 关联上超级用户
 /usr/local/Cellar/postgresql@ 15 / 15.7 / bin /createuser -s postgres

使用brew 安装的,必须要执行上面你的操作,关联上超级用户或者创建一个超级用户

  1. 创建weblate数据库

我这里使用的是GUI apAdmin4 来创建

  1. 配置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,
    }
}
  1. Error 61 connecting to 127.0.0.1:6379. Connection refused.

如果本地没有安装redis,请按照官方文档安装redis,如果已安装,需要在后台打开redis服务,在终端执行:

redis-server

OK,走完了上面的五个坑,至此,完成了官方文档上weblate migrate命令的执行。

执行 weblate runserver命令遇到的坑

  1. You're accessing the development server over HTTPS, but it only supports HTTP.

提示本地的服务无法处理https请求。

解决方案有两种,一种是在settings.py文件中禁用https,还有一种是支持本地服务的https请求(太麻烦了)。

这里说明第一种,打开settings.py ,找到ENABLE_HTTPSkey, 设置其value值为false

ENABLE_HTTPS = False

如果之前访问过localhost:8000,那么需要清理网站缓存,然后再次运行,这个时候完整的url就从https变成了http

直接访问端口,使用http://localhost:8000/ 访问即可,访问成功

其他项