【问题标题】:How to deploy Strapi backend to Heroku with Postgres addon?如何使用 Postgres 插件将 Strapi 后端部署到 Heroku?
【发布时间】:2020-08-16 19:41:33
【问题描述】:

我一直在使用 Strapi 官方教程,了解如何使用 postgres 将 Strapi 部署到 Heroku,按照所有说明操作后,我的 Heroku 应用程序显示错误。但是,当我检查构建日志时,没有错误,并且显示构建成功消息。

构建日志

2020-08-17T15:48:19.744258+00:00 app[web.1]: npm ERR! 
2020-08-17T15:48:19.744486+00:00 app[web.1]: npm ERR! Failed at the radio-darya-backend@0.1.0 start script.
2020-08-17T15:48:19.744753+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2020-08-17T15:48:19.756754+00:00 app[web.1]: 
2020-08-17T15:48:19.757071+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2020-08-17T15:48:19.757252+00:00 app[web.1]: npm ERR!     /app/.npm/_logs/2020-08-17T15_48_19_747Z-debug.log
2020-08-17T15:48:19.825573+00:00 heroku[web.1]: Process exited with status 1
2020-08-17T15:48:19.869487+00:00 heroku[web.1]: State changed from starting to crashed
2020-08-17T15:48:32.221633+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=radio-darya-backend.herokuapp.com request_id=1bceee5d-4452-4b2a-9638-d5f242b4337c fwd="213.162.246.193" dyno= connect= service= status=503 bytes= protocol=https
2020-08-17T15:48:32.751425+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=radio-darya-backend.herokuapp.com request_id=95d4de1a-5f17-49e3-bed2-b459bce9259e fwd="213.162.246.193" dyno= connect= service= status=503 bytes= protocol=https

package.json 依赖项

  "devDependencies": {},
  "dependencies": {
    "knex": "<0.20.0",
    "pg": "^8.3.0",
    "sqlite3": "latest",
    "strapi": "3.1.4",
    "strapi-admin": "3.1.4",
    "strapi-connector-bookshelf": "3.1.4",
    "strapi-plugin-content-manager": "3.1.4",
    "strapi-plugin-content-type-builder": "3.1.4",
    "strapi-plugin-email": "3.1.4",
    "strapi-plugin-upload": "3.1.4",
    "strapi-plugin-users-permissions": "3.1.4",
    "strapi-utils": "3.1.4"
  },

配置数据库.js

module.exports = ({ env }) => ({
  defaultConnection: 'default',
  connections: {
    default: {
      connector: 'bookshelf',
      settings: {
        "client":"postgres",
        "host":"${process.env.DATABASE_HOST}",
        "port": "${process.env.DATABASE_PORT}",
        "database": "${process.env.DATABASE_NAME}",
        "username": "${process.env.DATABASE_USERNAME}",
        "password": "${process.env.DATABASE_PASSWORD}",
        "ssl": { "rejectUnauthorized": false }
      },
      options: {
       
      },
    },
  },
});
her

【问题讨论】:

    标签: heroku strapi


    【解决方案1】:

    这对我来说适用于 v3.x Strapi。

        // Path: ./config/env/production/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,
              },
              options: {
                ssl: false,
              },
            },
          },
        });
    

    我们还需要将 Heroku 上的 NODE_ENV 变量设置为生产环境,以确保使用这个新的数据库配置文件。

    heroku config:set NODE_ENV=production
    

    https://strapi.io/documentation/v3.x/deployment/heroku.html

    注意这里是 v3.x 而不是 beta 版本。谷歌“strapi heroku postgres”目前仍然提供旧的测试版。

    【讨论】:

      【解决方案2】:

      您没有给出您遇到的错误消息?
      几周前我确实将我的strapi部署到了heroku,没有任何问题。
      您确定您遵循了 strapi 文档中的所有步骤吗?
      唯一我认为出错的是数据库连接。

      首先您必须在 Heroku 中安装 postgress 插件,然后获取配置信息,最后在 Heroku 中添加环境变量(settings/config vars),并修改strapi 配置文件以从环境变量中获取数据库信息。
      Strapi 文档:https://strapi.io/documentation/3.0.0-beta.x/deployment/heroku.html.

      编辑:
      Strapi 文档目前不正确,database.json 文件和位置已更改。见:
      strapi database.js / multiple database configs
      https://www.youtube.com/watch?v=xNE0TrI5OKk

      【讨论】:

      • 我没有错误消息,因为构建日志显示一切正常。
      • 我更新代码后还是不行,构建日志中仍然没有错误信息。
      • 在您的 Heroku 应用配置页面右上角有一个更多按钮。当您单击它时,会出现一个“查看日志”链接,它应该会为您提供更多信息,当 Heroku 尝试启动您的应用程序时发生了什么。如果您仍然无法使其正常工作,我建议您重新开始以测试该过程。安装新的strapi -quickstart 并验证开发是否正常工作。接下来创建一个新的 heroku 应用程序和 postgres-addon,获取 env-variables 的信息并将它们设置在 heroku 中。配置你的strapi数据库配置文件,构建并部署到heroku。测试是否一切正常。
      • 我查看了构建日志,它说它在 strpi 启动时失败。我尝试重新开始,但同样的错误再次发生。
      • 我相信这是一个数据库连接问题,其他一切都很简单。您可以通过将数据库连接信息写入strapi 配置文件来保留环境变量。这将遗漏一些可能的错误来源。然后您可以将一些错误信息写入数据库配置文件(config/database.js),看看您会得到不同的错误。如果您熟悉 js,可以在 database.js 中添加一些调试打印(调试可能还需要修改一些其他设置),以查看文件是否读取。
      【解决方案3】:

      我一天前刚刚完成了那个教程......对于一个完整的初学者来说,我也遇到了 strpi、postgres 和 heroku 的问题......这是我的经验。

      按照此处获取 postgres 和数据库设置: https://tute.io/install-configure-strapi-postgresql

      然后使用此处缺少的部分完成设置: https://strapi.io/documentation/v3.x/deployment/heroku.html

      基本上: 在您的系统上本地安装 postgres,创建数据库和用户并授予权限。 安装不带快速启动标志的strapi,并使用上面使用的详细信息。 使用 heroku cli 设置从 database_url configvar 派生的配置。 提交和推送,一切都应该很好。

      编辑: 在有问题的应用程序下的 Heroku 中:

      • 单击设置并向下滚动到环境变量并单击显示配置变量
      • 确保您有一个 DATABASE_URL 配置变量
      • 确保您的 postgres 特定配置变量与 DATABASE_URL 匹配

      例如。 DATABASE_URL = postgres://ebitxebvixeeqd:dc59b16dedb3a1eef84d4999sb4baf@ec2-50-37-231-192.compute-2.amazonaws.com: 5432/d516fp1u21ph7b

      • 读起来像这样:postgres:// USERNAME : PASSWORD @ HOST : PORT : DATABASE_NAME

      同时在你的 ./config/server.js 文件中确保你的主机是 0.0.0.0

      module.exports = ({ env }) => ({
        host: env('HOST', '0.0.0.0'),
        port: env.int('PORT', 1337),
        admin: {
          auth: {
            secret: env('ADMIN_JWT_SECRET', '***********************'),
          },
        },
      });
      

      还将您的 database.js 配置更改为:

      settings: {
          client: 'postgres',
          host: env('DATABASE_HOST', '127.0.0.1'),
          port: env.int('DATABASE_PORT', 5432),
          database: env('DATABASE_NAME', 'strapi'),
          username: env('DATABASE_USERNAME', 'postgres'),
          password: env('DATABASE_PASSWORD', ''),
          ssl: env.bool('DATABASE_SSL', false),
        },
        options: {}
      

      您的问题或日志没有什么可继续的,但以上基本上是我遇到的一些常见问题。

      【讨论】:

        【解决方案4】:

        直接复制这段代码到config/database.js中

        module.exports = ({ env }) => ({
        defaultConnection: 'default',
        connections: {
        default: {
        connector: 'bookshelf',
        settings: {
        client:'postgres',
        host:`${process.env.DATABASE_HOST}`,
        port: `${process.env.DATABASE_PORT}`,
        database: `${process.env.DATABASE_NAME}`,
        username: `${process.env.DATABASE_USERNAME}`,
        password: `${process.env.DATABASE_PASSWORD}`, 
        ssl: { "rejectUnauthorized": false }
        },
        options: {
        },
        },
        },
        });  
        

        【讨论】:

        • 我也遇到了这个问题,但是没用。我的配置文件夹中没有环境/生产目录,因此创建了它们。我保持我的 database.js 文件和你说的一样,但它不起作用。这不是我认为的解决方案。
        • 是的,我的错!请按照此步骤进行操作,我已经对其进行了测试!
        • 而且您还必须使用 heroku cli 中的 postgress env 变量配置 heroku,用于 DATABSAE_HOST、DATABASE_PORT、DATABASE_NAME、DATABASE_USERNAME、DATABASE _PASSWORD
        猜你喜欢
        • 1970-01-01
        • 2020-11-16
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        • 2021-04-07
        相关资源
        最近更新 更多