尝试将服务推送到 Apollo Engine 时,如何修复“将服务上传到引擎 → 未知指令“密钥””错误?
Posted
技术标签:
【中文标题】尝试将服务推送到 Apollo Engine 时,如何修复“将服务上传到引擎 → 未知指令“密钥””错误?【英文标题】:How to fix 'Uploading service to Engine → Unknown directive "key"' error when trying to push a service to Apollo Engine? 【发布时间】:2020-02-29 19:26:34 【问题描述】:当我尝试通过apollo service:push --endpoint=http://localhost:4001
将我的 apollo-server 应用程序推送到 Apollo 引擎时出现错误:
Uploading service to Engine → Unknown directive "key".
我做错了什么?
我目前正在设置一个包含一堆微服务的后端项目,并且我想使用 Apollos 新的托管联合功能,其中每个微服务的 graphql 模式都被推送到 Apollo 图形管理器并由 apollo 网关服务器组合。
我的架构如下所示:
extend type Query
me: User
type User @key(fields: "id")
id: ID!
name: String
username: String
这些是我的解析器:
const resolvers =
Query:
me()
return users[0];
,
User:
__resolveReference(object)
return users.find(user => user.id === object.id);
;
这是我的服务器设置:
const server = new ApolloServer(
schema: buildFederatedSchema([ typeDefs, resolvers ])
);
server.listen( port: 4001 ).then(( url ) =>
console.log(`Server ready at $url`);
);
apollo.config.js
module.exports =
service:
localSchemaFile: "./src/graphql/schema.graphql"
;
这是完整的错误信息:
npx apollo service:push --endpoint=http://localhost:4001
√ Loading Apollo Project
× Uploading service to Engine
→ Unknown directive "key".
GraphQLSchemaValidationError: Unknown directive "key".
at Object.buildSchemaFromSDL (C:/Users/Juliu/AppData/Roaming/npm-cache/_npx/13168/node_modules/apollo/node_modules/apollo-graphql/lib/schema/buildSchemaFromSDL.js:38:15)
at FileSchemaProvider.resolveSchema (C:/Users/Juliu/AppData/Roaming/npm-cache/_npx/13168/node_modules/apollo/node_modules/apollo-language-server/lib/providers/schema/file.js:24:40)
at GraphQLServiceProject.resolveSchema (C:/Users/Juliu/AppData/Roaming/npm-cache/_npx/13168/node_modules/apollo/node_modules/apollo-language-server/lib/project/base.js:66:36)
at Task.task (C:/Users/Juliu/AppData/Roaming/npm-cache/_npx/13168/node_modules/apollo/lib/commands/service/push.js:70:50)
【问题讨论】:
有同样的问题。从那以后你找到解决方案了吗? 也有类似的解决方案。我开始认为推出我们自己的托管图形服务可能更有意义。 Apollo Federation Graph Manager 的文档很糟糕。 【参考方案1】:我在运行时遇到了同样的错误:
npx apollo service:push \
--key=$APOLLO_KEY \
--graph=$GRAPH_NAME \
--variant=$GRAPH_VARIANT\
--serviceName=$SERVICE_NAME \
--serviceURL=$SERVICE_URL \
--localSchemaFile=./src/schema.graphql
出现错误是因为 apollo 工具不知道 apollo 联合指令。
使用此命令安装联邦:
yarn add @apollo/federation
重新运行第一个命令,它工作正常! (我从 Apollo Studio Support 得到了这个答案)
【讨论】:
【参考方案2】:如果您有多个架构文件,您想使用逗号连接它们
npx apollo service:push --localSchemaFile=$(find src/main/resources/graphql -name "*.graphqls" | tr "\n" "," | sed 's/.$//') --key=$APOLLO_KEY
src/main/resources/graphql
是架构目录的路径
【讨论】:
以上是关于尝试将服务推送到 Apollo Engine 时,如何修复“将服务上传到引擎 → 未知指令“密钥””错误?的主要内容,如果未能解决你的问题,请参考以下文章
当git从计算机推送到vps服务器时,权限被拒绝公钥[重复]
Google App Engine Docker容器502错误网关