Next.js 构建过程:未生成静态页面 - 部署失败

时间:2021-04-27 11:00:40

标签: javascript deployment next.js vercel

我正在尝试在 vercel 上部署我的第一个 next.js 项目。本地一切正常。

我的问题:在部署(命令:下一个构建)Web 应用程序时,我收到消息“生成静态站点 (0/2000)”,然后什么也没有发生。 1h(时间到期)后取消部署。

问题出在下面的(简化的)代码中。原因如下:当我在没有 const content 之后的部分的情况下部署项目时,部署是成功的 - 所以基本上我没有 singleProductResponse 和 contentResponse 作为道具,我只有 singleProductResponse..

我有点卡住了,不知道如何解决这个问题。有人能告诉我我做错了什么吗?非常感谢!!

const Item = ({ singleProductResponse, contentResponse }) => {
  const router = useRouter();
  if (router.isFallback) {
    return <div>Loading...</div>;
  }
  return (
    <div className={styles.section}>
      <Overview
        singleProductResponse={singleProductResponse}
        contentResponse={contentResponse}
      />
    </div>
  );
};

export async function getStaticPaths() {
  const itemResponse = await knex("Items");

  const paths = itemResponse.map((product) => ({
    params: {
      brand: product.brand,
      item: product.item,
    },
  }));

  return {
    paths,
    fallback: true,
  };
}

export async function getStaticProps({ params }) {
  try {
    const itemData = await knex("Items").where(
      "item",
      "like",
      `${params.item}`
    );
    const singleProductResponse = itemData[0];

   //!!!!!!!!!when leaving the following part out: deployment is successful!!!!!!!!!!!!
    const content = itemData[0].contentList;
    const splitContent = content.split(", ");
    const contentArray =
      typeof splitContent === "string"
        ? [splitContent]
        : splitContent;
    const result = await knex("Cos")
      .leftJoin("Actives", "Cos.content", "ilike", "Actives.content")
      .leftJoin("Alcohol", "Cos.content", "ilike", "Alcohol.content")
      .column([
        "Cos.content",
        "function",
        "translationPlant",
        "categoryAlcohol",
      ])
      .where((qb) => {
        contentArray.forEach((word) => {
          qb.orWhere("Cos.content", word);
        });
        return qb;
      });

    return {
      props: { singleProductResponse, contentResponse },
      revalidate: 1,
    };
  } catch (err) {
    console.log(err);
    return {
      redirect: {
        destination: "/",
        permanent: false,
      },
    };
  }
}



更新
深入挖掘后:我认为问题在于const content之后的部分构建过程太慢了。

运行 next build 以及在 vercel 上部署时,构建过程会在大约 . 1小时。我想这是因为构建过程有 45 分钟的限制。

我得到的最后一条消息是“生成静态页面(1000/2000)”(在 vercel 和本地)和“构建失败”(vercel)。我没有收到任何其他错误消息(也没有在 catch 块中)。

我已经尝试优化 const content 之后的部分(每个表都有一个索引(聚集索引 -> 主键),我重新设计了表(只有 4 个表要连接,而不是 6 个),消除了所有内容在查询中不必要并检查数据库(在 heroku 上托管的 postgres - hobby-basic)也在美国)。性能更好,但仍然不够。有没有人有一些改进的建议? TTFB 可能有点慢。

0 个答案:

没有答案