如标题所述,我的VPS受到攻击。我尝试通过运行./discourse-doctor获取当前的Discourse版本信息,但失败了。
幸运的是,我已将备份下载到本地机器中。
我该如何从这个备份中提取当前的版本信息?
谢谢。
如标题所述,我的VPS受到攻击。我尝试通过运行./discourse-doctor获取当前的Discourse版本信息,但失败了。
幸运的是,我已将备份下载到本地机器中。
我该如何从这个备份中提取当前的版本信息?
谢谢。
您想解决什么问题?您可以将备份恢复到任何较新版本。
我计划重新安装操作系统,然后设置之前的 Discourse 版本,以避免插件兼容性问题。
顺便问一下,如果 VPS 被入侵,还能备份 Discourse 吗?我只有几天前自动备份的文件。
[引用=“Alienazk,主题:3,话题:367077”]
如果VPS被黑了,是否仍然可以备份Discourse?
[/引用]
这取决于他们离开时的状态。你可以尝试通过rails控制台操作:
cd /var/discourse
./launcher enter app
discourse backup
cd public/backups/default
scp * user@destination.example.com:
你的备份文件名格式为forumname-2025-05-22-151843-v20250521053324.tar.gz
末尾的长字符串是最新运行的迁移版本。
要知道它属于哪个提交,
cd /var/www/discourse
git blame db/migrate/20250521053324*
你会看到一些输出,左列包含提交哈希。
这是你的新论坛应达到的最小版本。
(有时候该提交属于某个插件,在这种情况下,使用locate找到插件,然后进入其目录,执行相同的git blame语句)
我建议直接更新到最新版本。这是最简单的,也没有风险。如果不行,那么你可以按照那些优秀的指示去找那个提交,然后恢复到那个版本(你是否还打算将每个插件恢复到某个特定的提交?)
我试图执行备份,但失败了。输出如下:
# cd /var/discourse/
/var/discourse# ./launcher enter app
检测到x86_64架构。
/var/www/discourse# discourse backup
开始备份...
异常:BackupRestore::OperationRunningError
/var/www/discourse/lib/backup_restore/backuper.rb:70: in `ensure_no_operation_is_running'
/var/www/discourse/lib/backup_restore/backuper.rb:22: in `run'
script/discourse:84: in `backup'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/command.rb:28: in `run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/invocation.rb:127: in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor.rb:527: in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/base.rb:584: in `start'
script/discourse:290: in `<top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58: in `load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58: in `kernel_load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23: in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451: in `exec'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28: in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127: in `invoke_command'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527: in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34: in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584: in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28: in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:28: in `<top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117: in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:20: in `<top (required)>'
/usr/local/bin/bundle:25: in `load'
/usr/local/bin/bundle:25: in `<main>'
删除旧备份...
清理内容...
删除'.tar'残留文件...
标记备份为完成...
通知'system'备份结束...
完成!
[失败]
这是否意味着我无法执行备份?
它认为另一个备份正在运行。你可以尝试重启容器,然后再试一次。
是的,由于一个错误,此表可能会变得非常大,请参阅 Clean up user_auth_token_logs?
如果这成为一个问题,您可以停止备份,进入 rails 控制台
rails c
UserAuthTokenLog.delete_all
然后重新启动备份。
感谢您的建议。我已成功备份了最新的数据。
此外,由于操作系统已经重新安装,怎样才能直接使用 app.yml 和备份文件恢复到最新状态?是否有官方文档可以参考?还是我需要先通过标准的 Docker 安装流程,然后导入备份以恢复一切?
顺便提一下,当我试图查明我 Discord 备份对应的 commit 时,得到了以下输出。你知道为什么会这样吗?
/var/www/discourse# git blame db/migrate/20240516145911*
fatal: 没有这样的路径 'db/migrate/20240516145911*' 在 HEAD
就是这样!
剧透:它属于 chat 插件。
root@testbeta:/var/www/discourse# locate 202405161459
/var/www/discourse/plugins/chat/db/migrate/20240516145911_update_user_options_for_thread_title_prompts.rb
root@testbeta:/var/www/discourse# cd plugins/chat/
root@testbeta:/var/www/discourse/plugins/chat# git blame db/migrate/20240516145911*
非常感谢!
我不太确定:thinking: 这个方法会在Discourse仓库本身生成提交,而不是在聊天插件吗?如果是这样,你能解释一下背后的机制吗?
我尝试了您推荐的方法,但遇到了以下问题。
您能帮忙看看,告诉我可能出了什么问题吗?
/var/www/discourse# locate 20240516145911
/shared/backups/default/discourse-2025-05-24-113557-v20240516145911.tar.gz
/var/www/discourse/plugins/chat/db/post_migrate/20240516145911_update_user_options_for_thread_title_prompts.rb
root@tartali-app:/var/www/discourse# cd plugins/chat/
root@tartali-app:/var/www/discourse/plugins/chat# git blame db/migrate/20240516145911*
fatal: no such path 'plugins/chat/db/migrate/20240516145911*' in HEAD```
抱歉。我是通过 git blame db/post_migrate/20240516145911* 获取到的。这是输出结果:
root@tartali-app:/var/www/discourse/plugins/chat# git blame db/post_migrate/20240516145911*
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (422/422), done.
remote: Compressing objects: 100% (421/421), done.
remote: Total 2571 (delta 2), reused 1 (delta 1), pack-reused 2149 (from 1)
Receiving objects: 100% (2571/2571), 1008.42 KiB | 14.20 MiB/s, done.
Resolving deltas: 100% (2/2), done.
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (405/405), done.
Receiving objects: 100% (2571/2571), 1007.76 KiB | 21.91 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2166 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
Receiving objects: 100% (2571/2571), 1007.81 KiB | 22.90 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
Receiving objects: 100% (2571/2571), 1007.82 KiB | 22.40 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
Receiving objects: 100% (2571/2571), 1007.81 KiB | 22.40 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (405/405), done.
Receiving objects: 100% (2571/2571), 1007.76 KiB | 22.39 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2166 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (405/405), done.
Receiving objects: 100% (2571/2571), 1007.76 KiB | 22.39 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2166 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (413/413), done.
remote: Compressing objects: 100% (413/413), done.
Receiving objects: 100% (2571/2571), 1007.78 KiB | 23.44 MiB/s, done.
Resolving deltas: 100% (3/3), done.
remote: Total 2571 (delta 3), reused 0 (delta 0), pack-reused 2158 (from 1)
remote: Enumerating objects: 2571, done.
remote: Counting objects: 100% (422/422), done.
remote: Compressing objects: 100% (421/421), done.
remote: Total 2571 (delta 2), reused 1 (delta 1), pack-reused 2149 (from 1)
Receiving objects: 100% (2571/2571), 1008.39 KiB | 22.92 MiB/s, done.正在解决差异:100%(2/2),完成。
远程:正在枚举对象:2571,完成。
远程:正在计数对象:100%(422/422),完成。
远程:正在压缩对象:100%(421/421),完成。
远程:总计2571(增量2),重用1(增量1),重新打包2149(来自1)
正在接收对象:100%(2571/2571),1008.39 KiB | 22.41 MiB/s,完成。
正在解决差异:100%(2/2),完成。
远程:正在枚举对象:2571,完成。
远程:正在计数对象:100%(404/404),完成。
远程:正在压缩对象:100%(404/404),完成。
远程:总计2571(增量3),重用0(增量0),重新打包2167(来自1)
正在接收对象:100%(2571/2571),1007.74 KiB | 21.91 MiB/s,完成。
正在解决差异:100%(3/3),完成。
远程:正在枚举对象:2571,完成。
远程:正在计数对象:100%(422/422),完成。
远程:正在压缩对象:100%(421/421),完成。
远程:总计2571(增量2),重用1(增量1),重新打包2149(来自1)
正在接收对象:100%(2571/2571),1008.40 KiB | 22.92 MiB/s,完成。
正在解决差异:100%(2/2),完成。
远程:正在枚举对象:2571,完成。
远程:正在计数对象:100%(422/422),完成。
远程:正在压缩对象:100%(421/421),完成。
远程:总计2571(增量2),重用1(增量1),重新打包2149(来自1)
正在接收对象:100%(2571/2571),1008.39 KiB | 22.41 MiB/s,完成。
正在解决差异:100%(2/2),完成。
远程:正在枚举对象:2571,完成。
远程:正在计数对象:100%(414/414),完成。
远程:正在压缩对象:100%(414/414),完成。
正在接收对象:100%(2571/2571),1007.78 KiB | 22.90 MiB/s,完成。
正在解决差异:100%(3/3),完成。
远程:总计2571(增量3),重用0(增量0),重新打包2157(来自1)
远程:正在枚举对象:2571,完成。
远程:正在计数对象:100%(403/403),完成。
远程:正在压缩对象:100%(403/403),完成。
远程:总计2571(增量3),重用0(增量0),重新打包2168(来自1)
正在接收对象:100%(2571/2571),1007.66 KiB | 22.39 MiB/s,完成。
正在解决差异:100%(3/3),完成。
远程:正在枚举对象:2571,完成。
远程:正在计数对象:100%(413/413),完成。
远程:正在压缩对象:100%(413/413),完成。
远程:总计2571(增量3),重用0(增量0),重新打包2158(来自1)
正在接收对象:100%(2571/2571),1007.70 KiB | 12.44 MiB/s,完成。
正在解决差异:100%(3/3),完成。
远程:正在枚举对象:2571,完成。
远程:正在计数对象:100%(412/412),完成。
远程:正在压缩对象:100%(412/412),完成。
远程:总计2571(增量3),重用0(增量0),重新打包2159(来自1)
正在接收对象:100%(2571/2571),1007.71 KiB | 22.39 MiB/s,完成。
正在解决差异:100%(3/3),完成。
远程:正在枚举对象:2571,完成。
远程:正在计数对象:100%(419/419),完成。
远程:正在压缩对象:100%(418/418),完成。
远程:总计2571(增量2),重用1(增量1),重新打包2152(来自1)
正在接收对象:100%(2571/2571),1008.31 KiB | 21.92 MiB/s,完成。
正在解决差异:100%(2/2),完成。
远程:正在枚举对象:2571,完成.
远程:正在计数对象:100%(404/404),完成。
远程:正在压缩对象:100%(404/404),完成。
远程:总计 2571(delta 3),重用 0(delta 0),重新打包 2167(来自 1)
正在接收对象:100%(2571/2571),1007.66 KiB | 22.90 MiB/s,完成。
正在解析增量:100%(3/3),完成。
远程:正在枚举对象:2571,完成。
远程:正在计数对象:100%(414/414),完成。
远程:正在压缩对象:100%(414/414),完成。
远程:总计 2571(delta 3),重用 0(delta 0),重新打包 2157(来自 1)
正在接收对象:100%(2571/2571),1007.70 KiB | 12.00 MiB/s,完成。
正在解析增量:100%(3/3),完成。
远程:正在枚举对象:2571,完成。
远程:正在计数对象:100%(412/412),完成。
远程:正在压缩对象:100%(412/412),完成。
远程:总计 2571(delta 3),重用 0(delta 0),重新打包 2159(来自 1)
正在接收对象:100%(2571/2571),1007.70 KiB | 22.39 MiB/s,完成。
正在解析增量:100%(3/3),完成。
远程:正在枚举对象:2569,完成。
远程:正在计数对象:100%(416/416),完成。
远程:正在压缩对象:100%(416/416),完成。
正在接收对象:100%(2569/2569),1006.98 KiB | 22.89 MiB/s,完成。
远程:总计 2569(delta 3),重用 0(delta 0),重新打包 2153(来自 1)
正在解析增量:100%(3/3),完成。
远程:正在枚举对象:2569,完成。
远程:正在计数对象:100%(418/418),完成。
远程:正在压缩对象:100%(417/417),完成。
正在接收对象:100%(2569/2569),1007.58 KiB | 22.90 MiB/s,完成。
远程:总计 2569(delta 2),重用 1(delta 1),重新打包 2151(来自 1)
正在解析增量:100%(2/2),完成。
远程:正在枚举对象:2569,完成。
远程:正在计数对象:100%(405/405),完成。
远程:正在压缩对象:100%(405/405),完成。
远程:总计 2569(delta 3),重用 0(delta 0),重新打包 2164(来自 1)
正在接收对象:100%(2569/2569),1006.90 KiB | 22.88 MiB/s,完成。
正在解析增量:100%(3/3),完成。
远程:正在枚举对象:2569,完成。
远程:正在计数对象:100%(417/417),完成。
远程:正在压缩对象:100%(416/416),完成。
远程:总计 2569(delta 2),重用 1(delta 1),重新打包 2152(来自 1)
正在接收对象:100%(2569/2569),1007.75 KiB | 20.57 MiB/s,完成。
正在解析增量:100%(2/2),完成。
远程:正在枚举对象:2569,完成。
远程:正在计数对象:100%(417/417),完成。
远程:正在压缩对象:100%(416/416),完成。
远程:总计 2569(delta 2),重用 1(delta 1),重新打包 2152(来自 1)
正在接收对象:100%(2569/2569),1007.74 KiB | 23.44 MiB/s,完成。
正在解析增量:100%(2/2),完成。
远程:正在枚举对象:2569,完成。
远程:正在计数对象:100%(417/417),完成。
远程:正在压缩对象:100%(416/416),完成。
远程:总计 2569(delta 2),重用 1(delta 1),重新打包 2152(来自 1)
正在接收对象:100%(2569/2569),1007.55 KiB | 23.43 MiB/s,完成。
正在解析增量:100%(2/2),完成。
远程:正在枚举对象:2569,完成。
远程:正在计数对象:100%(417/417),完成。
远程:正在压缩对象:100%(416/416),完成。remote: Total 2569 (delta 2), 重用 1 (delta 1), pack-reused 2152 (from 1)
接收对象: 100% (2569/2569), 1007.56 KiB | 23.43 MiB/s, 完成。
解决增量: 100% (2/2), 完成。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (418/418), 完成。
remote: 压缩对象: 100% (417/417), 完成。
remote: Total 2569 (delta 2), 重用 1 (delta 1), pack-reused 2151 (from 1)
接收对象: 100% (2569/2569), 1007.56 KiB | 10.72 MiB/s, 完成。
解决增量: 100% (2/2), 完成。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (405/405), 完成。
remote: 压缩对象: 100% (405/405), 完成。
remote: Total 2569 (delta 3), 重用 0 (delta 0), pack-reused 2164 (from 1)
接收对象: 100% (2569/2569), 1006.91 KiB | 22.38 MiB/s, 完成。
解决增量: 100% (3/3), 完成。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (404/404), 完成。
remote: 压缩对象: 100% (404/404), 完成。
remote: Total 2569 (delta 3), 重用 0 (delta 0), pack-reused 2165 (from 1)
接收对象: 100% (2569/2569), 1006.90 KiB | 22.38 MiB/s, 完成。
解决增量: 100% (3/3), 完成。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (404/404), 完成。
remote: 压缩对象: 100% (404/404), 完成。
接收对象: 100% (2569/2569), 1006.88 KiB | 22.88 MiB/s, 完成。
remote: Total 2569 (delta 3), 重用 0 (delta 0), pack-reused 2165 (from 1)
解决增量: 100% (3/3), 完成。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (416/416), 完成。
remote: 压缩对象: 100% (416/416), 完成。
remote: Total 2569 (delta 3), 重用 0 (delta 0), pack-reused 2153 (from 1)
接收对象: 100% (2569/2569), 1006.89 KiB | 5.47 MiB/s, 完成。
解决增量: 100% (3/3), 完成。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (415/415), 完成。
remote: 压缩对象: 100% (415/415), 完成。
接收对象: 100% (2569/2569), 1006.89 KiB | 22.88 MiB/s, 完成。
解决增量: 100% (3/3), 完成。
remote: Total 2569 (delta 3), 重用 0 (delta 0), pack-reused 2154 (from 1)
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (415/415), 完成。
remote: 压缩对象: 100% (415/415), 完成。
接收对象: 100% (2569/2569), 1006.89 KiB | 21.42 MiB/s, 完成。
解决增量: 100% (3/3), 完成。
remote: Total 2569 (delta 3), 重用 0 (delta 0), pack-reused 2154 (from 1)
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (416/416), 完成。
remote: 压缩对象: 100% (415/415), 完成。
remote: Total 2569 (delta 2), 重用 1 (delta 1), pack-reused 2153 (from 1)
接收对象: 100% (2569/2569), 1007.50 KiB | 23.43 MiB/s, 完成。
解决增量: 100% (2/2), 完成。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (405/405), 完成。
remote: 压缩对象: 100% (405/405), 完成。remote: Total 2569 (delta 3), 重用 0 (delta 0), 重新打包 2164 (来自 1)
接收对象: 100% (2569/2569), 1006.63 KiB | 13.98 MiB/s, 完成。
解析 delta: 100% (3/3), 完成。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (405/405), 完成。
remote: 压缩对象: 100% (405/405), 完成。
remote: Total 2569 (delta 3), 重用 0 (delta 0), 重新打包 2164 (来自 1)
接收对象: 100% (2569/2569), 1006.63 KiB | 19.36 MiB/s, 完成。
解析 delta: 100% (3/3), 完成。
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (417/417), 完成。
remote: 压缩对象: 100% (416/416), 完成。
remote: Total 2569 (delta 2), 重用 1 (delta 1), 重新打包 2152 (来自 1)
接收对象: 100% (2569/2569), 1007.29 KiB | 15.50 MiB/s, 完成。
解析 delta: 100% (2/2), 完成。
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (405/405), 完成。
remote: 压缩对象: 100% (405/405), 完成。
remote: Total 2569 (delta 3), 重用 0 (delta 0), 重新打包 2164 (来自 1)
接收对象: 100% (2569/2569), 1006.63 KiB | 16.50 MiB/s, 完成。
解析 delta: 100% (3/3), 完成。
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (405/405), 完成。
remote: 压缩对象: 100% (405/405), 完成。
接收对象: 100% (2569/2569), 1006.63 KiB | 22.37 MiB/s, 完成。
解析 delta: 100% (3/3), 完成。
remote: Total 2569 (delta 3), 重用 0 (delta 0), 重新打包 2164 (来自 1)
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (417/417), 完成。
remote: 压缩对象: 100% (416/416), 完成。
remote: Total 2569 (delta 2), 重用 1 (delta 1), 重新打包 2152 (来自 1)
接收对象: 100% (2569/2569), 1007.29 KiB | 22.89 MiB/s, 完成。
解析 delta: 100% (2/2), 完成。
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (405/405), 完成。
remote: 压缩对象: 100% (405/405), 完成。
remote: Total 2569 (delta 3), 重用 0 (delta 0), 重新打包 2164 (来自 1)
接收对象: 100% (2569/2569), 1006.63 KiB | 21.42 MiB/s, 完成。
解析 delta: 100% (3/3), 完成。
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: 枚举对象: 2569, 完成。
remote: 计数对象: 100% (416/416), 完成。
remote: 压缩对象: 100% (416/416), 完成。
接收对象: 100% (2569/2569), 1006.67 KiB | 20.13 MiB/s, 完成。.
解决增量: 100% (3/3), 完成。
remote: Total 2569 (delta 3), reused 0 (delta 0), pack-reused 2153 (from 1)
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (417/417), 完成。
remote: Compressing objects: 100% (416/416), 完成。
remote: Total 2569 (delta 2), reused 1 (delta 1), pack-reused 2152 (from 1)
接收对象: 100% (2569/2569), 1007.29 KiB | 21.43 MiB/s, 完成。
解决增量: 100% (2/2), 完成。
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (416/416), 完成。
remote: Compressing objects: 100% (416/416), 完成。
remote: Total 2569 (delta 3), reused 0 (delta 0), pack-reused 2153 (from 1)
接收对象: 100% (2569/2569), 1006.68 KiB | 21.88 MiB/s, 完成。
解决增量: 100% (3/3), 完成。
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (415/415), 完成。
remote: Compressing objects: 100% (414/414), 完成。
接收对象: 100% (2569/2569), 1007.28 KiB | 23.42 MiB/s, 完成。
解决增量: 100% (2/2), 完成。
remote: Total 2569 (delta 2), reused 1 (delta 1), pack-reused 2154 (from 1)
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (415/415), 完成。
remote: Compressing objects: 100% (415/415), 完成。
remote: Total 2569 (delta 3), reused 0 (delta 0), pack-reused 2154 (from 1)
接收对象: 100% (2569/2569), 1006.68 KiB | 17.98 MiB/s, 完成。
解决增量: 100% (3/3), 完成。
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (417/417), 完成。
remote: Compressing objects: 100% (416/416), 完成。
接收对象: 100% (2569/2569), 1007.29 KiB | 22.89 MiB/s, 完成。
解决增量: 100% (2/2), 完成。
remote: Total 2569 (delta 2), reused 1 (delta 1), pack-reused 2152 (from 1)
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (404/404), 完成。
remote: Compressing objects: 100% (404/404), 完成。
remote: Total 2569 (delta 3), reused 0 (delta 0), pack-reused 2165 (from 1)
接收对象: 100% (2569/2569), 1006.63 KiB | 20.54 MiB/s, 完成。
解决增量: 100% (3/3), 完成。
自动在后台打包存储库以获得最佳性能。
有关手动整理,请参阅“git help gc”。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (416/416), 完成。
remote: Compressing objects: 100% (416/416), 完成。remote: Total 2569 (delta 3), reused 0 (delta 0), pack-reused 2153 (from 1)
接收对象: 100% (2569/2569), 1006.68 KiB | 22.88 MiB/s, 完成.
解析 delta: 100% (3/3), 完成.
自动在后台打包存储库以获得最佳性能。
请参阅 "git help gc" 以获取手动维护。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (404/404), done.
remote: Compressing objects: 100% (404/404), done.
remote: Total 2569 (delta 3), reused 0 (delta 0), pack-reused 2165 (from 1)
接收对象: 100% (2569/2569), 1006.63 KiB | 19.74 MiB/s, 完成.
解析 delta: 100% (3/3), 完成.
自动在后台打包存储库以获得最佳性能。
请参阅 "git help gc" 以获取手动维护。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (415/415), done.
remote: Compressing objects: 100% (415/415), done.
remote: Total 2569 (delta 3), reused 0 (delta 0), pack-reused 2154 (from 1)
接收对象: 100% (2569/2569), 1006.68 KiB | 14.18 MiB/s, 完成.
解析 delta: 100% (3/3), 完成.
自动在后台打包存储库以获得最佳性能。
请参阅 "git help gc" 以获取手动维护。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (416/416), done.
remote: Compressing objects: 100% (415/415), done.
接收对象: 100% (2569/2569), 1007.14 KiB | 22.89 MiB/s, 完成.
解析 delta: 100% (2/2), 完成.
remote: Total 2569 (delta 2), reused 1 (delta 1), pack-reused 2153 (from 1)
自动在后台打包存储库以获得最佳性能。
请参阅 "git help gc" 以获取手动维护。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (416/416), done.
remote: Compressing objects: 100% (416/416), done.
remote: Total 2569 (delta 3), reused 0 (delta 0), pack-reused 2153 (from 1)
接收对象: 100% (2569/2569), 1006.54 KiB | 22.37 MiB/s, 完成.
解析 delta: 100% (3/3), 完成.
自动在后台打包存储库以获得最佳性能。
请参阅 "git help gc" 以获取手动维护。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (404/404), done.
remote: Compressing objects: 100% (404/404), done.
接收对象: 100% (2569/2569), 1006.49 KiB | 22.37 MiB/s, 完成.
解析 delta: 100% (3/3), 完成.
remote: Total 2569 (delta 3), reused 0 (delta 0), pack-reused 2165 (from 1)
自动在后台打包存储库以获得最佳性能。
请参阅 "git help gc" 以获取手动维护。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (416/416), done.
remote: Compressing objects: 100% (416/416), done.
remote: Total 2569 (delta 3), reused 0 (delta 0), pack-reused 2153 (from 1)
接收对象: 100% (2569/2569), 1006.53 KiB | 22.37 MiB/s, 完成.
解析 delta: 100% (3/3), 完成.
自动在后台打包存储库以获得最佳性能。
请参阅 "git help gc" 以获取手动维护。
remote: Enumerating objects: 2569, done.
remote: Counting objects: 100% (416/416), done.remote: 正在压缩对象:100% (416/416),完成。
remote: 总计 2569 (delta 3),重用 0 (delta 0),重新打包 2153 (来自 1)
接收对象:100% (2569/2569),1006.53 KiB | 18.99 MiB/s,完成。
正在后台自动打包存储库以获得最佳性能。
有关手动维护,请参阅 "git help gc"。
remote: 正在枚举对象:2569,完成。
remote: 正在计数对象:100% (404/404),完成。
remote: 正在压缩对象:100% (404/404),完成。
接收对象:100% (2569/2569),1006.51 KiB | 22.37 MiB/s,完成。
正在解析 delta:100% (3/3),完成。
remote: 总计 2569 (delta 3),重用 0 (delta 0),重新打包 2165 (来自 1)
正在后台自动打包存储库以获得最佳性能。
有关手动维护,请参阅 "git help gc"。
remote: 正在枚举对象:2569,完成。
remote: 正在计数对象:100% (404/404),完成。
remote: 正在压缩对象:100% (404/404),完成。
接收对象:100% (2569/2569),1006.51 KiB | 22.88 MiB/s,完成。
remote: 总计 2569 (delta 3),重用 0 (delta 0),重新打包 2165 (来自 1)
正在解析 delta:100% (3/3),完成。
正在后台自动打包存储库以获得最佳性能。
有关手动维护,请参阅 "git help gc"。
remote: 正在枚举对象:2569,完成。
remote: 正在计数对象:100% (417/417),完成。
remote: 正在压缩对象:100% (417/417),完成。
remote: 总计 2569 (delta 2),重用 0 (delta 0),重新打包 2152 (来自 1)
接收对象:100% (2569/2569),1007.17 KiB | 13.80 MiB/s,完成。
正在解析 delta:100% (2/2),完成。
正在后台自动打包存储库以获得最佳性能。
有关手动维护,请参阅 "git help gc"。
remote: 正在枚举对象:2569,完成。
remote: 正在计数对象:100% (416/416),完成。
remote: 正在压缩对象:100% (416/416),完成。
接收对象:100% (2569/2569),1006.56 KiB | 22.88 MiB/s,完成。
正在解析 delta:100% (3/3),完成。
remote: 总计 2569 (delta 3),重用 0 (delta 0),重新打包 2153 (来自 1)
正在后台自动打包存储库以获得最佳性能。
有关手动维护,请参阅 "git help gc"。
remote: 正在枚举对象:2569,完成。
remote: 正在计数对象:100% (416/416),完成。
remote: 正在压缩对象:100% (416/416),完成。
remote: 总计 2569 (delta 3),重用 0 (delta 0),重新打包 2153 (来自 1)
接收对象:100% (2569/2569),1006.56 KiB | 11.44 MiB/s,完成。
正在解析 delta:100% (3/3),完成。
正在后台自动打包存储库以获得最佳性能。
有关手动维护,请参阅 "git help gc"。
remote: 正在枚举对象:2569,完成。
remote: 正在计数对象:100% (405/405),完成。
remote: 正在压缩对象:100% (405/405),完成。
接收对象:100% (2569/2569),1006.45 KiB | 21.88 MiB/s,完成。
正在解析 delta:100% (3/3),完成。
remote: 总计 2569 (delta 3),重用 0 (delta 0),重新打包 2164 (来自 1)
正在后台自动打包存储库以获得最佳性能。
有关手动维护,请参阅 "git help gc"。.
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 1) # frozen_string_literal: true
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 2)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 3) class UpdateUserOptionsForThreadTitlePrompts 003c ActiveRecord::Migration[7.0]
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 4) def up
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 5) change_column_default :user_options, :show_thread_title_prompts, true
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 6)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 7) if DB.query_single(
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 8) "SELECT 1 FROM user_options WHERE show_thread_title_prompts IS NULL LIMIT 1",
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 9) ).first
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 10) batch_size = 100_000
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 11) min_id = DB.query_single("SELECT MIN(user_id) FROM user_options").first.to_i
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 12) max_id = DB.query_single("SELECT MAX(user_id) FROM user_options").first.to_i
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 13) while max_id >= min_id
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 14) DB.exec(
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 15) "UPDATE user_options SET show_thread_title_prompts = true WHERE user_id > #{max_id - batch_size} AND user_id <= #{max_id}",
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 16) )
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 17) max_id -= batch_size
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 18) end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 19) end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 20)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 21) change_column_null :user_options, :show_thread_title_prompts, false
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 22) end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 23)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 24) def down
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 25) end
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 26) end
:...skipping...
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 1) # frozen_string_literal: true
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 2)
34c4acd32f5 (David Battersby 2024-05-17 00:53:19 +0400 3) class UpdateUserOptionsForThreadTitlePrompts
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.