strapi database.js / 多个数据库配置

strapi database.js / multiple database configs

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

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

任何人都可以告诉我如何设置它,因为我真的很难阅读这个问题的文档。

当前在文件结构中:

config/database.js

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

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 时,那里有正确的结构,即文章名称(显示在下图中)- 但 none 的内容在那里:即帖子、图片等

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

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

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

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

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

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

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

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

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

视频 LINK: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 页面上与一位非常乐于助人的代表交谈,以弄清楚我做错了什么(结果分配......)。

总之:

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

一线希望?

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

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

嗯,我希望这能帮助像我一样遇到这个问题的其他人....

沃利:)

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

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

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

编辑结束

在 Heroku 的 Postgres 中,我相信您已经为数据库连接创建了 env-variables。您可以通过创建 .env-file 为 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

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

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

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