我一直在尝试恢复备份,但遇到了错误。看起来问题出在 S3 备份上。
需要说明的是,这里使用的是与 S3 兼容的服务(Scaleway)。不过我不确定这个错误是否仅针对兼容服务。设置过程非常顺利,之前一直运行正常。如果这确实是 Scaleway 特有的问题,我可能会考虑停止使用该服务,因为我了解到官方仅正式支持 AWS S3。
我是按照这份指南进行设置的:Configure an S3 compatible object storage provider for uploads app.yml 文件中。
after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets
我在 app.yml 文件中也使用了相同的配置来设置 Scaleway(未在管理员界面中设置,因为看起来没有必要):Scaleway 配置
我尝试了在当前服务器的管理界面和命令行中执行恢复,也尝试了配置新服务器(复制了 app.yml 文件)并通过命令行进行恢复,但都遇到了相同的错误。
[STARTED]
'system' 已开始恢复!
标记恢复为运行中...
确保 /var/www/discourse/tmp/restores/default/2020-07-16-131434 存在...
正在将归档文件下载到临时目录...
#<Thread:0x000055c73a831df8@/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:116 run> 因异常而终止(report_on_exception 为 true):
Traceback (most recent call last):
1: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:120:in `block (3 levels) in thread_batches'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:128:in `write': undefined method `split' for nil:NilClass (NoMethodError)
EXCEPTION: undefined method `split' for nil:NilClass
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:128:in `write'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:120:in `block (3 levels) in thread_batches'
正在尝试回滚...
无需回滚
正在清理...
正在删除临时目录 '/var/www/discourse/tmp/restores/default/2020-07-16-131434'...
正在恢复 sidekiq...
标记恢复为完成...
正在通知 'system' 恢复已结束...
#<Thread:0x000055c73a831510@/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:116 run> 因异常而终止(report_on_exception 为 true):
Traceback (most recent call last):
1: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:120:in `block (3 levels) in thread_batches'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:128:in `write': undefined method `split' for nil:NilClass (NoMethodError)
#<Thread:0x000055c73a8316c8@/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:116 run> 因异常而终止(report_on_exception 为 true):
Traceback (most recent call last):
1: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:120:in `block (3 levels) in thread_batches'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:128:in `write': undefined method `split' for nil:NilClass (NoMethodError)
#<Thread:0x000055c73a8319e8@/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:116 run> 因异常而终止(report_on_exception 为 true):
Traceback (most recent call last):
1: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:120:in `block (3 levels) in thread_batches'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/aws-sdk-s3-1.66.0/lib/aws-sdk-s3/file_downloader.rb:128:in `write': undefined method `split' for nil:NilClass (NoMethodError)
完成!
[FAILED]
恢复结束。
也许错误仅出现在下载备份的过程中?![]()