首页 > 解决方案 > Heroku 与 Strapi,应用程序未使用生产数据库

问题描述

我已经将我的应用程序部署到 Heroku。它在访问时提供应用程序错误消息。

日志给了我这个:

[2021-02-15T01:04:05.882Z] debug ⛔️ Server wasn't able to start properly.
[2021-02-15T01:04:05.883Z] error Error: connect ECONNREFUSED 127.0.0.1:5432
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16)

根据我的猜测,它试图使用本地数据库。我认为该应用程序没有使用位于 config/env/production 中的 database.js。该应用程序运行良好heroku local

下面是我为生产环境设置的 database.js:

const parse = require("pg-connection-string").parse;
const config = parse(process.env.DATABASE_URL);

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,
      },
    },
  },
});

在 heroku 控制台上创建和打印配置变量会产生预期值。

标签: javascriptnode.jspostgresqlherokustrapi

解决方案


由于某种原因,当您最初将本地数据库设置为 Postgres 时,strapi 文档中对 heroku 的部署方法似乎不起作用。我和你有同样的问题,我使用NODE_ENVenv 变量修复了它。无需在其中创建新的生产数据库配置文件,./config/production/database.js您可以简单地使用 prod 配置扩展配置文件,./config/database.js并根据NODE_ENV设置的内容决定返回哪个。

例如:

module.exports = ({ env }) => {
  const parse = require("pg-connection-string").parse;
  const config = parse(env("DATABASE_URL", "127.0.0.1"));

  const devConfig = {
    client: "postgres",
    connection: {
      host: env("DATABASE_HOST", "127.0.0.1"),
      port: env.int("DATABASE_PORT", 5432),
      database: env("DATABASE_NAME", "db_name"),
      user: env("DATABASE_USERNAME", "root"),
      password: env("LOCAL_DB_PASSWORD"),
      ssl: env.bool("DATABASE_SSL", false),
    },
  };

  const prodConfig = {
    client: "postgres",
    connection: {
      host: config.host,
      port: config.port,
      database: config.database,
      user: config.user,
      password: config.password,
      ssl: {
        rejectUnauthorized: false,
      },
    },
    debug: false,
  };

  return 
      env("NODE_ENV", "development") === "production" ? prodConfig : devConfig
};


推荐阅读