我在
next js
上部署了一个 vercel
应用程序,在 AWS
上部署了后端,我定期部署到 vercel
(平均每 2 天一次),我的部署工作得很好,直到昨天我部署了一个只做了很少更改的代码主要是造型。我开始变得the serverless function Timeout error
(需要超过10秒,这是极限,通常需要不到3秒)。因此,当我回滚到旧部署时,再次开始正常工作。我还尝试重新部署相同的旧工作版本。令人惊讶的是我得到了serverless function Timeout error again.
我开始比较旧部署和最近重新部署的构建日志。我注意到的是不同的
Vecel Version
,在旧版本中是 "Vercel CLI 31.0.1"
。和新的 "Vercel CLI 31.0.3"
。这是了解两个版本之间更新内容的链接:Vercel Release
我的 getserverSideprops 功能很简单,并且工作了一年多,没有任何问题,也没有任何变化。它仍在开发环境中。
export async function getServerSideProps({ query, res }) {
// await avoidRateLimit()
const apolloClient = intializeApollo()
let {
name,
loc,
cat,
neigh,
subCat,
} = query
if (!name ) {
// would like to save to cache only
res.setHeader("Cache-Control", "s-maxage=172800, stale-while-revalidate")
}
let variables = {
take: 11,
skip: 0,
query: name,
}
if (neigh) {
variables.neighborhood = neigh
} else {
variables.city = loc
}
if (subCat) {
variables.subCat = subCat
} else if(cat && cat != "-" ){
variables.cat = cat
}
let queries = [
apolloClient.query({ query: GET_BUSINESSES_SEARCH, variables }),
]
await Promise.all(queries)
return {
props: {
initialApolloState: apolloClient.cache.extract(),
},
}
}
我的猜测是倾向于不同的 Vercel CLI 版本,但我不确定。有什么帮助吗?
经过几个小时和尝试,我找到了解决方案。
问题是Vercel,在免费计划中,基本上不允许使用getServerSideProps,抛出这个错误。
您需要切换到 PRO 计划(或使用其他托管提供商,而不是 Vercel)。
此外,仅仅将 Vercel 切换到 PRO 计划是不够的;您还需要在项目根目录中创建一个 vercel.json 文件,指定带有 SSR 的动态页面的地址,并为其扩展内存和超时设置。
我为顶部的所有页面设置了它,为了以防万一,添加了两条更重要的路线(它们是不起作用的路线)。这有效。我希望它可以节省某人的时间,因为我自己花了很长时间寻找解决方案。
下面提供了 vercel.json 内容的示例:
{
"framework": "nextjs",
"functions": {
"src/pages/**/*": {
"memory": 3008,
"maxDuration": 20
},
"src/pages/all-therapists/index.tsx": {
"memory": 3008,
"maxDuration": 24
},
"src/pages/all-therapists/[diseaseUrl].tsx": {
"memory": 3008,
"maxDuration": 24
}
}
}