parse-platform - 将 Parse Server 从 v3 升级到 v4 会触发错误“GraphQL:必须提供源”
问题描述
我在 3.10.x 版本中使用 ParseServer ( https://parseplatform.org ) 和包含的 GraphQL 端点。我曾经apollo-link
从我的云代码中进行一些查询,因此graphql
安装了模块(除了parse-server
that use的依赖项apollo-server
)。我已指定 GraphQL 依赖项的版本以匹配parse-server
(v14.5.8) 使用的版本。
在此配置中,一切正常。
我现在升级parse-server
到最后一个版本4.3.x,并更新graphql
以继续匹配所使用的版本parse-server
:v15.1.0。
服务器现在在启动时崩溃并出现错误:Must define Source. Received undefined.
.
- 因此,我尝试删除
graphql
依赖项,但仍然出现错误。 - 我已经降级
graphql
到以前的版本 v14.5.8 并得到另一个错误,因为graphql
使用了 2 个不同的实例。 - 我检查了跨依赖项只使用了一个版本的 GraphQL。
我检查了graphql
发生错误时加载的模块:./node_modules/graphql
在 v15.1.0 版本中。
有没有人知道这个错误和修复它的方法?
如果需要更多详细信息,请询问!
谢谢,
知觉
编辑#1
Parse Server 以集群形式启动,由throng
.
解析服务器初始化
const restAPI = new ParseServer(config)
const graphQL = new ParseGraphQLServer(restAPI, {
graphQLPath: process.env.GRAPHQL_MOUNT || "/graphql",
playgroundPath: "/playground",
})
// Serve the Parse API on the /parse URL prefix
app.use(process.env.PARSE_MOUNT, restAPI.app)
graphQL.applyGraphQL(app)
解析服务器配置
{
appName: process.env.PARSE_APP_NAME,
databaseURI: process.env.DATABASE_URI,
databaseOptions: {
maxTimeMS: Number(process.env.DB_QUERY_MAX_TIME) || 30000,
},
cloud: `${__dirname}${cloudCode}`,
appId: process.env.PARSE_APP_ID,
masterKey: process.env.PARSE_MASTER_KEY,
clientKey: process.env.PARSE_CLIENT_KEY,
javascriptKey: process.env.PARSE_JAVASCRIPT_KEY,
restAPIKey: process.env.PARSE_REST_KEY,
serverURL: serverURL,
publicServerURL: serverURL,
allowClientClassCreation: process.env.ALLOW_CLIENT_CLASS_CREATION === 'true',
filesAdapter: new S3Adapter(
process.env.S3_BUCKET, {
bucketPrefix: process.env.S3_BUCKET_PREFIX,
directAccess: true
}),
verifyUserEmails: false,
emailAdapter: MailAdapter(),
cacheAdapter: process.env.REDIS_PARSE_CACHE_URL
? new RedisCacheAdapter({ url: process.env.REDIS_PARSE_CACHE_URL })
: null,
liveQuery: {
classNames: ["SomeClass"],
redisURL: process.env.REDIS_LIVE_QUERIES_SERVER_URL
},
}
完整的错误堆栈
$ heroku local web
[OKAY] Loaded ENV .env File as KEY=VALUE Format
10:45:21 web.1 | > pinpo-parse-server@4.2.9 start:dyno:web /Users/percypyan/Developer/projects/pinpo/pinpo-parse-server
10:45:21 web.1 | > npm run start:process:${WEB_PROCESS_NAME}
10:45:22 web.1 | > pinpo-parse-server@4.2.9 start:process:parse-server /Users/percypyan/Developer/projects/pinpo/pinpo-parse-server
10:45:22 web.1 | > node --optimize_for_size --gc_interval=100 lib/apps/parse-server
10:45:24 web.1 | Error: Must provide Source. Received: undefined.
10:45:24 web.1 | at devAssert (/Users/percypyan/Developer/projects/pinpo/pinpo-parse-server/node_modules/graphql/jsutils/devAssert.js:12:11)
10:45:24 web.1 | at new Parser (/Users/percypyan/Developer/projects/pinpo/pinpo-parse-server/node_modules/graphql/language/parser.js:80:67)
10:45:24 web.1 | at Object.parse (/Users/percypyan/Developer/projects/pinpo/pinpo-parse-server/node_modules/graphql/language/parser.js:35:16)
10:45:24 web.1 | at Object.<anonymous> (/Users/percypyan/Developer/projects/pinpo/pinpo-parse-server/node_modules/graphql-tools/dist/stitching/introspectSchema.js:39:42)
10:45:24 web.1 | at Module._compile (internal/modules/cjs/loader.js:759:30)
10:45:24 web.1 | at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
10:45:24 web.1 | at Module.load (internal/modules/cjs/loader.js:628:32)
10:45:24 web.1 | at Function.Module._load (internal/modules/cjs/loader.js:555:12)
10:45:24 web.1 | at Function.wrappedLoad [as _load] (/Users/percypyan/Developer/projects/pinpo/pinpo-parse-server/node_modules/newrelic/lib/shimmer.js:481:24)
10:45:24 web.1 | at Module.require (internal/modules/cjs/loader.js:666:19)
10:45:24 web.1 | npm
10:45:24 web.1 | ERR! code ELIFECYCLE
10:45:24 web.1 | npm ERR! errno 1
10:45:24 web.1 | npm
10:45:24 web.1 | ERR! pinpo-parse-server@4.2.9 start:process:parse-server: `node --optimize_for_size --gc_interval=100 lib/apps/parse-server`
10:45:24 web.1 | npm ERR! Exit status 1
10:45:24 web.1 | npm ERR!
10:45:24 web.1 | npm ERR! Failed at the pinpo-parse-server@4.2.9 start:process:parse-server script.
10:45:24 web.1 | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
10:45:24 web.1 | npm ERR! A complete log of this run can be found in:
10:45:24 web.1 | npm ERR! /Users/percypyan/.npm/_logs/2020-09-09T08_45_24_589Z-debug.log
10:45:24 web.1 | npm
10:45:24 web.1 | ERR! code ELIFECYCLE
10:45:24 web.1 | npm ERR! errno 1
10:45:24 web.1 | npm
10:45:24 web.1 | ERR! pinpo-parse-server@4.2.9 start:dyno:web: `npm run start:process:${WEB_PROCESS_NAME}`
10:45:24 web.1 | npm ERR! Exit status 1
10:45:24 web.1 | npm ERR!
10:45:24 web.1 | npm
10:45:24 web.1 | ERR! Failed at the pinpo-parse-server@4.2.9 start:dyno:web script.
10:45:24 web.1 | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
10:45:24 web.1 | npm ERR! A complete log of this run can be found in:
10:45:24 web.1 | npm ERR! /Users/percypyan/.npm/_logs/2020-09-09T08_45_24_655Z-debug.log
[DONE] Killing all processes with signal SIGINT
10:45:24 web.1 Exited with exit code null
解决方案
在没有进一步研究的情况下几周后,有人建议我尝试使用npm
而不是yarn
. 所以我试过了,整个事情又正常运行了。
问题出在锁定文件中:将其删除后,即使使用yarn
,问题也已解决。
因此,如果您处于这种情况,请尝试删除node_modules
文件夹并锁定文件,然后重新运行yarn
或npm install
. 这应该可以解决问题。
感谢 Parse 核心贡献者davimacedo帮助我解决了这个问题!
推荐阅读
- powershell - 如何组合具有空格和变量的注册表路径?
- php - docker php:7.1-apache 不加载 http_request2
- javascript - 如何使输入 Hello,输出为 e:1、h:1、l:2、o:1?
- typescript - 在 TypeScript 中键入一个可为空的回调变量
- django - 如何在 CreateView 获取失败时验证和重定向
- python - 获取图像中像素的主要颜色
- r - 使用 R 基础,如何为带有表达式、粘贴、bquote 和/或替换的绘图构建可变参数标题?
- .htaccess - .htaccess 重写。子域映射到查询字符串
- mysql - 在另一台服务器上恢复 mysql 数据会影响性能吗?
- ios - CollectionView“致命错误:在隐式展开可选值时意外发现 nil”