我正在尝试在 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 可能有点慢。