批量导入问题

你好

我的问题和回答以 JSON 格式呈现:

示例 JSON 文档
{
    "id": "x017c4h221p7T8sboHglB-7kQ==",
    "created": "2018-05-09T20:13:23Z",
    "title": "Docker i/o 错误",
    "body": "<p>你好 Stephane,每次退出时我都不得不重启 Docker 才能运行 Kafka,因为它在 TCP 端口绑定时报错。我的理解是,当我停止 Kafka 服务并退出时,端口会被释放。</p>",
    "course": {
        "_class": "course",
        "id": "x0190RCkGpZ6FMe4CPAF8aOoQ==",
        "title": "Apache Kafka 系列 - 初学者入门 Apache Kafka v2",
        "url": "/apache-kafka/"
    },
    "replies": [{
            "_class": "answer",
            "id": "x01Qx2rNaX48kxP4NFFSSCK7g==",
            "created": "2018-05-10T07:04:10Z",
            "user": {
                "_class": "user",
                "id": "x01N-Fup_OULjTEtHPLwc8JSQ==",
                "name": "Ivan",
                "locale": "en_US"
            },
            "is_top_answer": null,
            "body": "<p>你好 Nandini,</p><p>能否请您更详细地说明您的问题?如果您停止 Kafka 服务,Kafka 使用的端口当然会被释放。</p><p>此致,</p><p>Ivan</p>",
        },
        {
            "_class": "answer",
            "id": "x01bLG2QPhyLwZ_RJsbMge16A==",
            "created": "2018-05-10T20:45:39Z",
            "user": {
                "_class": "user",
                "id": "x01oX4mwhRQoLXKuhHXDHg3zg==",
                "name": "Nandini",
                "locale": "en_US"
            },
            "is_top_answer": null,
            "body": "<p>我停止了 Kafka 服务,但当我重新启动时,Docker 端口并未释放,我在端口 2181 和 3030 上遇到了 TCP 绑定错误。</p>",
            "is_upvoted": false,
            "num_upvotes": 0
        },
        {
            "_class": "answer",
            "id": "x01yL8D1-inVZE3njAo08-uMw==",
            "created": "2018-05-11T00:32:46Z",
            "user": {
                "_class": "user",
                "id": "x01lNfqEyIqBf47SM76dxq0rw==",
                "name": "Stephane Maarek",
                "locale": "en_US"
            },
            "is_top_answer": true,
            "body": "<p>如果可以的话,请重启 Docker 引擎或您的计算机。看看这是否有帮助!</p><p>否则,可能有其他进程正在占用端口 2181。请查看常见问题解答章节(第 22 讲),因为许多学生之前都遇到过这些问题。</p>",
            "is_upvoted": false,
            "num_upvotes": 0
        }
    ],
    "user": {
        "_class": "user",
        "id": "x01oX4mwhRQoLXKuhHXDHg3zg==",
        "name": "Nandini",
        "locale": "en_US"
    }
}

我编写了一个 Python 脚本来调用 API,但我在 API 方面遇到了大量与限流相关的错误:

您执行此操作的次数过多。请等待 X 秒后再试。

我需要导入大约 3000 个问题(平均每个问题附带 2 个回答),因此我觉得 API 路由可能太长了。

有没有办法禁用此 API 限流问题?

是否有其他方式可以导入我的数据? 它们仅与两个用户关联(因此无需创建用户)。此外,我使用的是托管的 Discourse,因此不确定是否可以直接访问底层数据库。

我很乐意分享我的 Python 代码,或者如果这需要大量工作,我可以设立悬赏。

Make sure the user performing the actions via the API key has staff privileges, even if only temporary.

That will help with some of the rate limits.

An easy approach I used was to add
sleep(0.7)
inside the Ruby loop. (you may need to tweak that)

For 3000 requests it would take 35 minutes to complete. A bit painful, but for a once off I don’t think it would be all that bad.

I have admin permissions (using my own API key) and I still get a throttle it seems every 60 API calls. I tried to change things in settings > Rate limits but doesn’t seem to help

我也遇到同样的问题。

如果我人为地添加 1 秒延迟,就不会再出现这个问题了。

好的,可以通过以下方式避免每分钟 60 次调用的限制:

在服务器上

cd /var/discourse

用编辑器打开 containers/app.yml(我使用 vi),在 env 部分添加以下行:

DISCOURSE_MAX_ADMIN_API_REQS_PER_KEY_PER_MINUTE : 6000

然后保存。

重新构建(仅重启不会生效)
./launcher rebuild app