将Strapi 4.0应用程序部署到Heroku时出现“错误:未定义未知方言”

cetgtptt  于 2022-11-13  发布在  其他
关注(0)|答案(9)|浏览(155)

我创建了一个Strapi应用程序,使用最新版本,新的4.0,我想把它部署到Heroku。我确实按照Strapi文档来做,就像在this page中解释的那样。现在我得到了一个错误,我不明白,我猜它与postgres有关。这是错误

2021-12-18T15:26:26.658380+00:00 app[web.1]: [2021-12-18 15:26:26.656] debug: ⛔️ Server wasn't able to start properly.
2021-12-18T15:26:26.659122+00:00 app[web.1]: [2021-12-18 15:26:26.658] error: Unknow dialect undefined
2021-12-18T15:26:26.659123+00:00 app[web.1]: Error: Unknow dialect undefined
2021-12-18T15:26:26.659123+00:00 app[web.1]: at getDialectClass (/app/node_modules/@strapi/database/lib/dialects/index.js:12:13)
2021-12-18T15:26:26.659123+00:00 app[web.1]: at getDialect (/app/node_modules/@strapi/database/lib/dialects/index.js:19:23)
2021-12-18T15:26:26.659124+00:00 app[web.1]: at new Database (/app/node_modules/@strapi/database/lib/index.js:38:20)
2021-12-18T15:26:26.659124+00:00 app[web.1]: at Function.Database.init (/app/node_modules/@strapi/database/lib/index.js:84:33)
2021-12-18T15:26:26.659125+00:00 app[web.1]: at Strapi.bootstrap (/app/node_modules/@strapi/strapi/lib/Strapi.js:347:30)
2021-12-18T15:26:26.659125+00:00 app[web.1]: at Strapi.load (/app/node_modules/@strapi/strapi/lib/Strapi.js:410:16)
2021-12-18T15:26:26.659125+00:00 app[web.1]: at async Strapi.start (/app/node_modules/@strapi/strapi/lib/Strapi.js:161:9)

除了在我链接的文档中解释的操作之外,我只是在开发模式下使用UI添加了一些集合。我如何修复这个错误并将这个新的4.0版本的Strapi部署到Heroku?

rsaldnfx

rsaldnfx1#

当我在本地连接pg时,我也遇到了类似的问题,然后意识到我的连接配置不正确。当我用v4模板替换它时,它工作了。
路径:config/database.js

module.exports = ({ env }) => ({
  defaultConnection: "default",
  connection: {
    client: "postgres",
    connection: {
      host: env("DATABASE_HOST", "localhost"),
      port: env.int("DATABASE_PORT", 5432),
      database: env("DATABASE_NAME", "bank"),
      username: env("DATABASE_USERNAME", "postgres"),
      password: env("DATABASE_PASSWORD", "0000"),
      schema: env("DATABASE_SCHEMA", "public"),
    },
  }
});

对于Heorku,正如文章所建议的:
路径:config/env/production/database.js

const parse = require('pg-connection-string').parse;
const config = parse(process.env.DATABASE_URL);
module.exports = ({ env }) => ({
  connection: {
    client: 'postgres',
    connection: {
      host: config.host,
      port: config.port,
      database: config.database,
      user: config.user,
      password: config.password,
      ssl: {
        rejectUnauthorized: false
      },
    },
    debug: false,
  },
});

PS:确保在推送到heroku之前将pg-connection-string添加到依赖项中

jgwigjjp

jgwigjjp2#

  • getDialectClass* -从错误日志中
const getDialectClass = client => {
  switch (client) {
    case 'postgres':
      return require('./postgresql');
    case 'mysql':
      return require('./mysql');
    case 'sqlite':
      return require('./sqlite');
    default:
      throw new Error(`Unknow dialect ${client}`);
  }
};

其中客户端是- db.config.连接
因此,如果您一直遵循以前的解决方案-其中谈到了连接对象等(如下图)

module.exports = ({ env }) => ({
  defaultConnection: 'default',
  connections: {
    default: {
      connector: 'bookshelf',
      settings: {
        client: 'postgres',
        host: config.host,
        port: config.port,
        database: config.database,
        username: config.user,
        password: config.password,
        ssl: {
          rejectUnauthorized: false,
        },
      },
      options: {
        ssl: true,
      },
    },
  },
});

db.config.connection将返回undefined. &,因此它将失败
使用- www.example.com配置数据库https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/required/databases.html#configuration-structure正常工作

toe95027

toe950273#

如果您在Strapi中使用打字稿,我们也可能会遇到此问题,因为存在影响Strapi打字稿功能的issue
当我将Strapi从4.3.8降级到4.3.2时,我可以解决该问题

bz4sfanl

bz4sfanl4#

您可以使用strapi docs here中的heroku/cli来检查此方法,但情况是一样的,我使用的是版本4.0.2,此方法适用于旧版本V3,我认为文档需要更新,大部分内容已过时,例如“仅获取数据(示例:posts/project etc..)与创建它的已验证用户相关”,文档和论坛中与此主题相关的大多数资源都是在V4中不起作用的弃用解决方案。
对于部署,我遇到了同样的问题,我尝试了很多解决方案,但都不起作用,但我还是设法让服务器像这样运行:

但是我在访问“/admin”页面时遇到了这个问题:

Strapi真的很有趣,让我们希望他们很快更新文档,有人在这里回应一个解决方案。

jmo0nnb3

jmo0nnb35#

我通过直接使用数据库URL修复了这个问题。不确定为什么旧的方法在Strapi V4中不起作用。

module.exports = ({ env }) => ({
  defaultConnection: "default",
  connection: {
    client: "postgres",
    connection: {
      connectionString: process.env.DATABASE_URL,
      ssl: {
        rejectUnauthorized: false
      }
    },
  }
});
gpnt7bae

gpnt7bae6#

以防有人遇到和我一样的问题。
在我的情况下,我在Windows中使用Vim作为我的文本编辑器。在编辑“config/database.js”文件后,它在该目录中留下了“database.js~”文件。然后,这个文件名会导致同样的问题:“错误:未定义未知方言”。
我猜这是strapi的一个bug。删除那个文件后,一切都正常了!
我在我的vim配置文件中添加了这一行:

set backupdir=~/.vimbackup

然后在“C:/User/[me]/”中创建名为.“vimbackup”的目录。

tgabmvqs

tgabmvqs7#

Strapi再次更改了数据库配置结构,甚至他们的部署文档也使用了旧的不正确的示例。
下面是最新的示例:Strapi数据库配置

dm7nw8vv

dm7nw8vv8#

在strapi v4中,您需要使用like:

module.exports = ({ env }) => ({
  connection: {
    client: "postgres",
    connection: {
      host: env("DATABASE_HOST", "localhost"),
      port: env.int("DATABASE_PORT", 5432),
      database: env("DATABASE_NAME", "db-name"),
      user: env("DATABASE_USERNAME", "postgres"),
      password: env("DATABASE_PASSWORD", "password"),
      schema: env("DATABASE_SCHEMA", "public"),
    },
  }
});
5m1hhzi4

5m1hhzi49#

它看起来像是有一个问题在新的strapi版本,当我试图创建项目与typescript支持我面临同样的错误,我不知道如果你是使用typescript在您的项目,但这两个解决方案解决了我的问题;
解决方案(1):-使用tsc $ tsc .\config\database.ts .\config\server.ts ./ .\config\admin.ts创建编译器配置文件
解决方案(2):-在package.json文件中将您的strapi降级到4.3.2版本。
解决方案(3):-在使用4.3.2 npx创建strapi应用程序@4.3.2 test-strapi-verion-with-ts --ts的状态下创建strapi应用程序时,不要使用@latest
您可以使用其中一个主题

相关问题