我尽了最大努力想自己解决这个问题,但我完全错过了一些东西。
我正在使用NextJS 12和Google Cloud Translate的API来转换按钮上的一个单词。在本地它工作得很好,但是一旦我试图部署到vercel,权限/密钥就在某个地方被搞砸了。
在本地,我有我的key.json,它是从我的服务帐户获得的。它就在我的项目的根目录中。我有我的.env.local
文件,它引用了那个密钥文件。它看起来像这样GOOGLE_APPLICATION_CREDENTIALS=./<projectid&key>.json
但是当我尝试翻译时,我遇到了一个错误。'Request failed with status code 500'
我的翻译端点看起来像这样,我几乎是从谷歌的小教程复制。
import { NextApiRequest, NextApiResponse } from "next";
export default async (req: NextApiRequest, res: NextApiResponse) => {
const translationClient = new TranslationServiceClient();
const projectId = <myprojectID>;
const location = "global";
async function translateText() {
const request = {
parent: `projects/${projectId}/locations/${location}`,
contents: [req.body.text],
mimeType: "text/plain",
sourceLanguageCode: "en",
targetLanguageCode: "es",
};
const [response] = await translationClient.translateText(request);
res.json(response.translations[0].translatedText);
}
translateText();
};
"我尝试过的事"
1.把JSON作为一个单独的环境变量放在vercel上,基本上就是GOOGLE_APPLICATION_CREDENTIALS
和key.json文件.
1.试着把所有的都放在一行。
1.试着把钥匙拆开,并把它变成这样的格式:
GOOGLE_ACCOUNT_TYPE=service_account
GOOGLE_PROJECT_ID=project11111
GOOGLE_PRIVATE_KEY_ID=11111111111111
etc
然而,我也不打算让这个方法在本地工作。4.保留.env.local
到key.json的路径,只上传key.json本身。
这些都不起作用,我很困惑。
我查看过的资源
- https://github.com/vercel/vercel/issues/749#issuecomment-715009494
1.将firebase privateKey作为Heroku配置变量时的转义问题 - https://daveteu.medium.com/call-google-cloud-function-from-vercel-serverless-hosting-1b1688bb462c
我试着把这些应用到我的情况中,但是我不明白。我真的很感激任何帮助!非常感谢。
1条答案
按热度按时间qxsslcnc1#
在四处寻找了几天后,我找到了一个有效的解决方案。
我使用类似的命令将
keys.json
转换为base64字符串。https://gist.github.com/tomi/0675e58919af4554b198cee3f84405e5然后使用此处找到的方法。https://github.com/orgs/vercel/discussions/219
我把base64字符串放在.env文件的一行中进行检查,然后对Vercel环境变量进行了同样的检查,结果成功了。