2
  1. 如果我在 database.js 中运行 sqlite,则 Strapi 在本地工作,但如果我正在运行 postgres / 我在网上发现我可以指定npm run develop使用 sqlite,生产应该使用 postgres。

对于 REF - 我在这里找到了这个答案:https ://github.com/strapi/strapi/discussions/6832

谁能告诉我如何设置它,因为我真的很难阅读这个问题的文档。

目前在文件结构中:

config/database.js

我有这两个设置(用于本地和heroku)-我注释掉postgresheroku在本地工作的设置

module.exports = ({ env }) => ({
  defaultConnection: 'default',
  connections: {
    default: {
      connector: 'bookshelf',
      settings: {
        client: 'sqlite',
        filename: env('DATABASE_FILENAME', '.tmp/data.db'),
      },
      options: {
        useNullAsDefault: true,
      },
    },
  },
});


module.exports = ({ env }) => ({
  defaultConnection: 'default',
  connections: {
    default: {
      connector: 'bookshelf',
      settings: {
        client: 'postgres',
        host: env('DATABASE_HOST', '127.0.0.1'),
        port: env.int('DATABASE_PORT', 27017),
        database: env('DATABASE_NAME', 'strapi'),
        username: env('DATABASE_USERNAME', ''),
        password: env('DATABASE_PASSWORD', ''),
      },
      options: {
        ssl: false,
      },
    },
  },
});

  1. 当我将我的strapi项目推送到Heroku时,正确的结构是存在的,即文章的名称(如下图所示) - 但没有任何内容:即帖子、图像等

在此处输入图像描述

我想发生的事情是因为本地strapi是使用sqlite构建的,heroku要求我使用postgres作为数据库,数据库不一样所以数据没有被正确读取?

(我可能是错的......)

在这种情况下:如何将本地开发(推荐快速启动设置)移动到生产站点?

  • 你 npm 运行构建吗?然后在您的普通前端站点上托管strapi?

  • 有没有办法将数据从一个数据库移动到另一个数据库?

很抱歉在这里问了很多小问题——我可能错过了一个将它们联系在一起的概念。

在此先感谢您的帮助,沃利

4

3 回答 3

5

我发现了一个非常有用的 Youtube 视频,它实际上解释了第 1 步的这个过程)

如何运行不同的数据库,具体取决于它是由开发还是生产使用。

简短的回答是在 database.js 文件中您编写一个 if 语句来查看您使用的是开发还是生产:

一旦我实现了这个,我会写一个完整的答案:)

视频链接:https ://www.youtube.com/watch?v=xNE0TrI5OKk


第 2 部分:您能否将您在 Strapi 中完成的工作迁移到生产数据库,例如 Heroku....?

可悲的是简单的答案(而且令人沮丧)-不!

这是来自 Strapis 网站:

Strapi 是否处理内容的部署或迁移?Strapi 目前不提供任何工具来在不同环境(即从开发到生产)之间迁移或部署数据更改。除 Content-Manager 设置外,要了解有关此选项的更多信息,请参阅以下 CLI 文档。

在这里找到:https ://strapi.io/documentation/v3.x/getting-started/troubleshooting.html#frequently-asked-questions


我还在 Strapi Slack 页面上与一位非常有帮助的代表交谈,以找出我做错的 WTF(结果是分配.....)。

反正:

  • 在本地 Strapi 中创建您的内容类型
  • 将它们推送到您的在线strapi (Heroku)
  • 在线而不是本地添加所有内容.....

一线希望?

我还没有这样做,但显然您可以手动传输数据并将其从 sqlite 转换为 postgres,方法是:

您必须使用一些本地 DB 客户端(DBeaver 支持 SQLite)进行数据转储,然后将该数据导入 PG 服务器(您也可以在那里使用 DBeaver) Strapi 目前没有任何用于环境之间内容迁移的工具或建议。

好吧,我希望这可以帮助像我一样遇到这个问题的其他人....

沃利 :)

于 2020-08-10T13:22:47.257 回答
1

您可以将 Strapis(开发和生产)都指向使用相同的数据库,在您的情况下是 Heroku 的 Postgres。如果两者都使用相同的数据库,那么对 dev-strapi 中的数据结构和内容所做的修改也可以在生产中使用。在您将新版本推送到 Heroku 之前,数据结构(例如新内容类型)将不可用,但使用旧数据结构的新内容也将在生产 Strapi 中可用(两个 Strapi 使用相同的数据库 -> 相同的数据)。

编辑:以下行不再有效,最新版本的strapi 使用稍微不同的方法来配置数据库连接(参见另一个答案的视频链接)

您可以在 dev-strapi 中定义数据库连接:
\config\env\development\database.json
\config\env\production\database.json

编辑结束

在 Heroku 的 Postgres 中,我相信您已经为数据库连接创建了环境变量。您可以通过创建 .env 文件为 dev-version 创建相同的变量(您会从 Heroku 的变量中找到所有需要的信息):

DATABASE_HOST=xxx-yyy-zzz.eu-west-1.compute.amazonaws.com
DATABASE_PORT=XXYY
DATABASE_NAME=xxxyyyxxx
DATABASE_USERNAME=xxxxxxx
DATABASE_PASSWORD=123123123xyzxyz
于 2020-08-10T13:28:43.630 回答
1

听起来您实际上是想在环境之间迁移数据……strapi 目前不支持。您可以尝试查找或编写自己的数据库种子文件以在环境之间移动数据。

不要使用来自不同环境的相同数据库。

这已经被正确回答了,不知道为什么没有选择正确的答案。

于 2020-08-21T11:40:55.320 回答