启动干净项目时出现Serverpod sql错误

Isa*_* dl 1 backend dart flutter serverpod

我创建了一个新的 serverpod 项目并启动了数据库和 redis 的 docker 容器。但是当我自行启动服务器时,出现以下错误:

Failed to connect to the database. Retrying in 10 seconds. PostgreSQLSeverity.error 42P01: relation "serverpod_runtime_settings" does not exist

我已尝试按照此处的入门步骤进行操作: https: //docs.serverpod.dev/,但仍然遇到此问题。

Isa*_* dl 6

编辑:从版本 1.2 (2024-01-15) 开始,Serverpod 内置了迁移支持。

在一个新的干净项目中,您所要做的就是--apply-migrations在启动服务器时添加标志。

$ dart bin/main.dart --apply-migrations
Run Code Online (Sandbox Code Playgroud)

要在更改模型时创建新的迁移,您可以运行以下命令:

$ serverpod create-migration
Run Code Online (Sandbox Code Playgroud)

创建新的迁移后,您必须在启动服务器时应用更改。

1.2 之前的解决方案

文档对此并不清楚,但是 serverpod 附带了一组数据库表,需要在运行服务器之前对其进行初始化。

从您的服务器项目运行:

$ docker cp ./generated/tables-serverpod.pgsql <container_name>:/docker-entrypoint-initdb.d/tables-serverpod.pgsql

$ docker exec -u postgres <container_name> psql <db_name> postgres -f docker-entrypoint-initdb.d/tables-serverpod.pgsql
Run Code Online (Sandbox Code Playgroud)

<container_name>通常是,但您可以通过假设容器正在运行your_project_server-postgres来找到确切的名称。$ docker ps如果没有首先启动它$ docker-compose up --build --detach

<db_name>通常与开发服务器相同,project_name但对于开发服务器,名称在此文件中定义:your_project/your_project_server/config/development.yaml


这里发生了什么?您需要创建数据库表,并且 serverpod 已经附带了该代码,您所需要做的就是在数据库上运行它!

您可以在该路径中找到sql代码:your_project/your_project_server/generated/tables-serverpod.pgsql

上面的命令首先将 pgsql 文件复制到正在运行的 docker 容器中,然后使用第二个命令在数据库上执行 sql 代码!这意味着您将创建所需的所有表。仅供参考,您可以在设置任何 serverpod 模块(例如 severpod_auth)时使用相同的方法,因为它们还附带一组数据库表,请参阅此处的文档: https: //docs.serverpod.dev/concepts/modules


也可以使用 GUI 工具,例如https://www.pgadmin.org/https://eggerapps.at/postico2/。要连接到数据库,您可以在这些文件中找到用户名和密码:your_project/your_project_server/config/development.yamlyour_project/your_project_server/config/passwords.yaml使用 localhost:8090 作为地址(这是默认值)。然后将pgsql文件中的代码复制粘贴到一个可以执行sql代码的窗口中,然后执行它。