使用 gatsby-source-contentful 访问您的内容空间失败

Posted

技术标签:

【中文标题】使用 gatsby-source-contentful 访问您的内容空间失败【英文标题】:Accessing your Contentful space failed with gatsby-source-contentful 【发布时间】:2020-07-08 14:26:32 【问题描述】:
gatsby: 2.20.8
gatsbh-source-contentful: 2.2.5

我已经验证了我的 spaceIdaccessToken 是正确的,并且我已经验证了这些密钥可以访问我的 Contentful development 环境。我试过了:

启用GATSBY_CONTENTFUL_OFFLINE 删除.cache目录 删除节点模块 将environment 设置为“master”并将其完全删除 将 env vars 包装在模板文字中(建议在一个旧的 github 问题上)

我不断收到此错误。有什么想法吗?

ERROR 

Accessing your Contentful space failed.
Try setting GATSBY_CONTENTFUL_OFFLINE=true to see if we can serve from cache.

Used options:
spaceId: "*********z1u"
accessToken: "*****************************************vMI'"
environment: "development"
host (default value): "cdn.contentful.com"
downloadLocal (default value): false
localeFilter (default value): [Function]
forceFullSync (default value): false
pageLimit (default value): 100
useNameForId (default value): true

这是我来自gatsby-config.js的代码


  resolve: `gatsby-source-contentful`,
  options: 
    spaceId: process.env.CONTENTFUL_SPACE_ID,
    accessToken: process.env.CONTENTFUL_ACCESS_TOKEN,
    environment: process.env.CONTENTFUL_ENVIRONMENT,
  ,
,

【问题讨论】:

只是想知道为什么配置文件中有环境?另外你目前有什么内容吗?我知道在 UI 中有任何内容模型之前尝试设置时遇到了一些错误。你还能看到 graphiQL 输出吗? 我确实发布了内容。我在 Contentful 中创建了开发环境,只是为了看看这是否是问题所在(我只是没有费心创建一个 env var),但是如果我从 gatsby-source-contentful 选项中完全删除了 environment 属性,它仍然会失败。我无法访问 graphiQL,因为此错误正在终止构建 我更改了 gatsby-config.js 代码并为环境添加了一个 env var 的引用,以帮助避免混淆 我也有同样的问题。我安装了名为rg-portfolio 的启动器并运行脚本以使用模型和内容初始化我的内容空间。所以我的 spaceID 和 app 令牌是正确的。当我启动gatsby develop 时,它给了我你的错误。我posted an issue in the rg-portfolio repo。在这一点上,我怀疑这个问题是由于 graphQL 查询所期望的模型与内容空间中实际存在的模型之间的任何类型的不匹配造成的。 使用 rg-portfolio,我犯了使用 Contentful 教程中提供的访问令牌的错误。相反,我需要在我的 Contentful 空间上使用访问令牌...Setting > API Keys > Example Key 1 【参考方案1】:

正如我在对您的问题的评论中所说,我怀疑这与我的 Gatsby 构建的预期内容模型与内容空间中实际存在的模型之间的差异有关。为此,我决定完全删除我的内容空间并重新创建它。然后我重新运行了 rg-portfolio 存储库附带的自动化脚本,该脚本负责创建我所有的初始内容模型。这是 rg-portfolio 说明的一部分。

contentful space --space-id xxxxxxxxx0b9 import --content-file contentful-data.json

脚本成功完成,没有错误 - 只有关于速率限制的警告。

当我最终重试 gatsby develop 时,它成功了!!!

赛后分析。

我怀疑这个 Contentful “模型差异”问题的部分原因是因为当我第一次运行 contentful-data.json 脚本时:

    它正在针对一个内容空间运行,该空间中已经有一些不相关的内容模型。 它给出的实际错误让我怀疑它是否真的正常工作。

因此,我有很大的空间相信内容空间中的模型存在“错误”。

【讨论】:

感谢您的回复,但就我而言,我认为这是另一回事。我尝试创建一个新空间并使用 Contentful 提供的示例/入门空间之一为您创建。即使有他们的样本空间,我仍然遇到同样的错误(更新到新密钥后)。另一个奇怪的事情是我可以从命令行创建内容模型,但运行 gatsby-develop 仍然失败 我什至分叉了这个 repo,更新了密钥,但在运行 gatsby develop github.com/Khaledgarbaya/egghead-jamstack-course 时仍然出现该错误【参考方案2】:

不确定您是否同时使用它,但我遇到了同样的问题,并在 Github https://github.com/gatsbyjs/gatsby/issues/19392 上找到了这个问题,这就是您和我遇到的问题。

显然,在较新版本的 gatsby-source-plugin 中,它也需要密钥才能访问主环境(这在 imo 中很荒谬)。

在授予对主环境的密钥访问权限后,它开始工作。

【讨论】:

谢谢,但我已验证我尝试访问的空间具有 masterdevelopment 环境的权限,但我仍然遇到同样的错误 @Barryman9000 当您说您的意思是您正在使用可以访问主分支和开发分支的 api 密钥时?对我来说,只有当我在这里检查两个分支时才有效i.imgur.com/jzROvsj.png 正确,我试过只选中 master 的复选框,然后选中 development 和两者。这似乎无关紧要。【参考方案3】:

我在尝试访问我的开发环境时遇到了同样的问题。我使用的是gatsby 2.22.17gatsby-source-contentful 2.3.14。显然,Contentful 有环境别名。它可以在settings > environments 中找到。我通过使用环境别名解决了我的问题。

基本上,这就像让 master 成为一个指向环境的指针。设置时可能会要求您重命名主环境。请仔细考虑要为主环境选择的名称,因为您可能无法再次重命名它。我不认为这个过程是可逆的。

因此,任何时候您都想在您的开发环境中工作。您必须转到环境设置并更改别名的目标环境。然后在完成后将其更改回您的主环境。尽量不要忘记将别名的目标环境更改回主环境。否则,您的生产站点可能会在下一次构建时从开发环境中获取其内容。

我希望这会有所帮助。这个解决方案对我来说没有意义,但它是我能找到的唯一一个。我很想听听任何其他更好的解决方案。

【讨论】:

感谢您的建议,但不幸的是这对我不起作用。我有一个 API 密钥,我正在使用 SpaceIDContent Delivery API - access tokenenvironment 设置为 masterdevelopment 或我的新别名 prod-1。我验证了 AP​​I 密钥可以访问别名,甚至尝试将它们切换到不同的配置,但没有任何效果。再次感谢【参考方案4】:

在我的情况下,只是删除了 Contentful 中的 2 个空格,然后创建了一个新空格,更改了 env 变量的值并且它起作用了,似乎内容模型和内容有问题..

只是报告

【讨论】:

【参考方案5】:

在将一个空间导入另一个空间后遇到了类似的问题。 我删除了演示 API 密钥(我曾尝试使用)并创建了一个新密钥。 之后工作

【讨论】:

以上是关于使用 gatsby-source-contentful 访问您的内容空间失败的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)