Vercel Serverless Function 出现超时错误(执行时间超过 10 秒)

问题描述 投票:0回答:1

我在

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 版本,但我不确定。有什么帮助吗?

next.js deployment serverless vercel
1个回答
0
投票

经过几个小时和尝试,我找到了解决方案。

问题是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
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.