无法上传备份

您好!

我刚在新的服务器上安装了 Discourse,现在正尝试上传一个大约 400MB 的备份文件。
它卡在 40% 并出现以下错误:
Slow down, too many requests from this IP address. Please retry again in 2 seconds. Error code: ip_10_secs_limit.

这是什么意思?我该如何解决?

1 个赞

作为一种变通方法,您可以通过 SCP 上传备份。有关更多信息,请参阅 https://meta.discourse.org/t/restore-a-backup-from-command-line/108034。

@martin 这会是由于切换到 Uppy 引起的吗?

2 个赞

我按照您提供的链接从 CLI 恢复备份,但没有任何内容被恢复,它仍然和全新安装一样。

备份中是否包含“旧”的 app.yml 文件,并且在恢复备份时会被覆盖?如果不是,整个备份就毫无用处。

我尝试从 Discourse 内部恢复备份,现在我的网站是空白的。

这是我尝试从命令行恢复备份时的输出。当然,我遵循了链接中的命令,但似乎有些东西已经改变了。

Starting restore: backup-2021-12-06-185610-v20211201221028.tar.gz
[STARTED]
'system' has started the restore!
Marking restore as running...
Making sure /var/www/discourse/tmp/restores/default/2021-12-18-163225 exists...
Copying archive to tmp directory...
EXCEPTION: lib/discourse.rb:127:in `exec': Failed to copy archive to tmp directory.
cp: cannot stat '/var/www/discourse/public/backups/default/backup-2021-12-06-185610-v20211201221028.tar.gz': No such file or directory
lib/discourse.rb:154:in `execute_command'
lib/discourse.rb:127:in `exec'
lib/discourse.rb:34:in `execute_command'
/var/www/discourse/lib/backup_restore/local_backup_store.rb:42:in `download_file'
/var/www/discourse/lib/backup_restore/backup_file_handler.rb:62:in `copy_archive_to_tmp_directory'
/var/www/discourse/lib/backup_restore/backup_file_handler.rb:22:in `decompress'
/var/www/discourse/lib/backup_restore/restorer.rb:42:in `run'
script/discourse:149:in `restore'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/base.rb:485:in `start'
script/discourse:290:in `<top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli.rb:477:in `exec'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli.rb:31:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli.rb:25:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/exe/bundle:49:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/friendly_errors.rb:128:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/exe/bundle:37:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Trying to rollback...
There was no need to rollback
Cleaning stuff up...
Removing tmp '/var/www/discourse/tmp/restores/default/2021-12-18-163225' directory...
Marking restore as finished...
Notifying 'system' of the end of the restore...
Finished!
[FAILED]
Restore done.
1 个赞

所以你把文件放错地方了,或者文件名写错了。如果是后者,那么

   discourse restore

不带文件名会提示可用的文件。

如果你执行

     discourse backup

可以看到它把文件放在了哪里。我不会在手机上尝试输入正确的路径。

1 个赞

不,我按照这里的说明做的:

所以如果这是错误的路径,那么教程就是错的。这就是我问文件应该放在哪里。

输入错误很容易。这就是我建议测试您是否将内容放在正确位置的方法。您是否尝试过
discourse restore
不带文件名?

我知道你的意思。但我完全按照说明操作(没有出错,我复制了路径),所以我想问说明是否错误,或者路径在过去两年中是否有所更改。

我将再试一次,但也许我必须重新安装 Discourse,因为现在我只有一个空白网站。

我不认为您可以复制粘贴这部分内容而不进行更改?

1 个赞

我认为目标路径是正确的,否则他们应该说明具体移到哪里。

1 个赞

啊,我明白了。我把你的帖子理解为“我不可能有任何拼写错误,因为我把所有内容都从指南复制并粘贴过来了”。:slightly_smiling_face:

我可以使用 discourse restore 恢复备份,但缺少了一些分类,整个标题也丢失了,我无法登录,app.yml 仍然和全新安装一样,还有很多其他问题。
备份是 2021 年 12 月 6 日的,我选择了备份所有内容,但一半的东西都丢失了。
所以对我来说,整个备份和恢复过程简直是一团糟!

这一定非常令人沮丧。我对此表示同情。

app.yml 不包含在 Discourse 的备份中。您需要从旧实例复制一个过来,或者编辑一个新的。

2 个赞

这应该在创建备份时说明(作为最后的提示信息)。我无法访问旧文件,创建一个新文件是可能的,但我记不起我有哪些插件了。

但仍然存在一些问题:为什么有些类别和主题丢失了,为什么标题丢失了,以及我为什么无法登录。

我也不确定。:slightly_smiling_face: 你在新实例上运行了 ./launcher discourse-setup 吗?

是的,当然。或者我恢复时不应该这样做吗?或者你的意思是恢复之后?

我以为那可能会填补一些缺失的部分,但不确定。

也许可以尝试备份文件,将其恢复到一个新的 discourse 中,并更新 app.yml,看看是否会有改善。

1 个赞

这是在新服务器上全新安装的,我以为 app.yml 在备份中,但我错了。我无法访问“旧”的 discourse 实例,因此似乎无法恢复 app.yml 文件。

您可以编辑现有的 app.yml 文件,添加您认为可能缺失的内容?我不确定是什么导致类别或登录信息未能一并复制?

您是否恢复了完整的备份文件?OP 中的那个在 40% 时停止了。如果您恢复了那个版本,或许可以解释为什么一半的东西丢失了?

不过我只是在猜测。:slightly_smiling_face: 很抱歉帮不上更多忙。

抱歉给您带来了这么多麻烦。我无法解释这可能是如何发生的。

我无法想象备份只会恢复部分类别。如果只恢复了部分类别,那么这就是您备份中包含的内容。也许您有一个旧备份。

app.yml 与您的数据无关,只与主机名和其他设置 Discourse 所需的内容有关。您可以将任何数据库恢复到任何站点。

1 个赞

我将再次重新安装 Discourse(使用全新的服务器镜像),并尝试再次恢复备份。

40% 的卡顿发生在直接在 Discourse 中上传时,之后我通过 SCP 将备份复制到服务器。

是的,这是真的,但我认为备份中也会保存一些重要的东西。现在我不知道我在旧实例中安装了哪些插件,以及它们的设置是什么样的。
备份是今年 12 月 6 日的,所以只有几天前。