常见问题 FAQ

找到使用 Strapi 时可能遇到的最常见问题的一些答案和解决方案。以下是您在使用 Strapi 时可能遇到的最常见问题的答案和解决方案。

为什么我无法在生产/准备阶段创建或更新内容类型?

Strapi 将模型配置文件(定义模型架构的文件)存储在诸如 ./src/api/restaurant/content-types/restaurant/schema.json 之类的文件中。由于 Node.js 的工作方式,为了使更改生效,需要重新启动 Node 服务器。这可能会导致您的生产服务停机,同样,这些更改应该在某种源代码控制中进行跟踪。

通常,您的开发“流程”将遵循以下路径:

  • 开发 - 在主机上本地开发 Strapi 应用程序,然后将更改推送到源代码控制中
  • 暂存 - 将更改从源代码控制部署到“类似生产”的环境进行测试
  • 生产 - 如果不需要其他更改,则部署到生产中
  • 根据需要重复,建议您在进行过程中正确版本控制和测试应用程序

目前和将来,没有计划允许在生产环境中创建或更新模型,并且目前没有计划将模型设置移入数据库。没有已知或推荐的解决方法。

Strapi 是否处理内容的部署或迁移?

Strapi 确实提供了一项称为 数据传输 的功能,允许您将内容从一个 Strapi 实例导出和导入到另一个 Strapi 实例,或从文件存档导出和导入。这对于将内容从一个环境迁移到另一个环境很有用。

用户无法登录管理面板

随着 Strapi 测试版的发布,发生了根本性的变化,最终用户(REST 和 GraphQL 用户)与管理员(管理面板用户)分开,这样普通用户就无法访问管理面板。如果您想了解更多关于为什么进行此更改的信息,您可以阅读 Strapi 博客文章

Strapi 发布了管理员和权限(RBAC - 基于角色的访问控制),它确实允许对用户可以在管理面板内访问的内容进行一定程度的控制,并包括一些字段级权限。您还可以为内容类型、单一类型、插件和设置等内容授予角色特定权限。

为什么我的应用程序的数据库和上传在 PaaS 类型的服务上重置?

如果您使用 --quickstart 创建 Strapi 项目,则默认情况下会使用 SQLite 数据库。PaaS 系统(Heroku、DigitalOcean Apps、Google App Engine 等)文件系统通常是 短暂的 或只读的,这意味着每次重置 dyno(容器)时,所有文件系统更改都会丢失。由于 SQLite 和本地上传都存储在文件系统上,因此自上次重置 dyno 以来对这些所做的任何更改都将被删除。通常,dyno 每天至少重置一次,在大多数情况下,每天重置多次,或者在将新代码推送到这些服务时重置。

建议您使用数据库插件,例如 Heroku 的 PostgreSQL。对于文件上传,您需要使用第三方提供商之一,例如 Cloudinary 或 AWS S3。

如何将我的免费 Strapi Cloud 试用版升级为付费计划?

Strapi Cloud 提供 14 天免费试用。每当您准备升级到 付费计划 之一时,请使用 Strapi Cloud 项目设置的 Plans 部分(有关更多详细信息,请参阅 Cloud 文档)。

Strapi 可以在无服务器环境中运行吗?

由于应用程序的结构,Strapi 不太适合无服务器环境。Strapi 启动时会发生几个操作,可能需要几秒钟。无服务器部署通常需要应用程序非常快速地冷启动。Strapi 旨在作为始终在线的服务运行,我们不打算在可预见的未来减少冷启动时间。因此,在无服务器环境中运行 Strapi 并不是一个好的体验,因为每个请求都需要几秒钟而不是几毫秒的时间来响应。选择冷启动还是热启动是一个架构决策,许多软件开发人员需要从很早的阶段就做出这个决定,所以在选择使用 Strapi 时请考虑这一点。

我可以将我的内容管理器布局配置存储在模型设置中吗?

目前 Strapi 不支持此功能,已添加 config:dumpconfig:restore 命令,以便在不同部署和环境之间移动时更容易迁移这些设置。

我们不提供将这些配置存储在模型设置中的能力,原因如下:

  • 如果在管理界面中进行内容国际化和翻译,它将产生冲突。
  • 根据角色和权限,布局可能会有所不同。
  • 虽然无论创建什么内容,模型都是相同的,但贡献界面可能会有所不同。例如,我们有一个想法,只为贡献者创建一个移动应用程序。标签和布局配置可能会根据设备和界面而有所不同。

出于所有这些原因以及其他原因,我们认为如果我们将配置存储在模型设置文件中,这将是一个错误,可能会让用户感到困惑。最终的解决方案是使跨环境的迁移和部署更容易。

如何自定义插件?

Strapi 使用一个名为 extension 的系统,因为插件存储在 node_modules 文件夹中。由于此扩展由 Strapi 使用编程钩子来覆盖插件的某些部分。

我可以添加自己的第三方身份验证提供商吗?

是的,您可以按照以下 指南 操作,也可以查看 users-permissions 并提交拉取请求以包含所有人的提供商。最终,Strapi 确实计划从当前的授权/最纯粹的提供商转移到类似于上传提供商的拆分系统。

但是,目前没有关于此迁移的预计完成时间。

Strapi 是否允许我更改默认 ID 类型或名称?

不,目前无法允许更改默认 ID 名称,也不允许您切换数据类型(例如 PostgreSQL 中的 UUID),将来正在研究对此的支持。

您能否对动态区域和多态关系进行过滤和/或深度过滤?

目前,我们不打算允许对动态区域或多态关系进行过滤,因为这样做会带来各种复杂性和性能问题。

如何使用 Strapi 设置 SSL?

Strapi 本身不实现任何 SSL 解决方案,这是因为直接在低端口上向公共网络提供 Node.js 应用程序是极其不安全的。

在基于 Linux 的操作系统上,您需要 root 权限才能绑定到 1024 以下的任何端口,而典型的 SSL 是端口 443,您需要以 root 身份运行您的应用程序。

同样,由于 Strapi 是基于 Node.js 的,为了对 SSL 证书进行更改(例如,当证书过期时),您需要重新启动应用程序才能使更改生效。

由于这两个问题,建议您使用代理应用程序(例如 NginxCaddyHAProxy、Apache、Traefik 或许多其他应用程序来处理到 Strapi 的边缘路由。环境 server.json 中有设置来处理上游代理。代理块要求填写所有设置,并将修改任何后端插件(例如身份验证提供程序和上传插件),以使用代理 URL 替换您的标准 localhost:1337

我可以在 Strapi 项目中使用 TypeScript 吗?

从 v4.2.0-beta.1 开始,Strapi 项目支持 TypeScript。核心开发人员文档和 专用 TypeScript 支持页面 中提供了 TypeScript 代码示例。

X 功能是否已可用?

您可以查看 公共路线图,了解哪些功能请求目前正在处理中,哪些功能请求尚未开始,并添加新的功能请求。