SELECT postid
FROM `vb4_post`
WHERE `visible` > '1'
ORDER BY postid
创建一个 imported_post_ids.txt 文件,将每个 postid 按行写入。
为修复脚本创建一个新文件:
nano script/import_scripts/fix_visibility.rb
内容如下:
require_relative '../../config/environment'
require_relative 'base/lookup_container'
@lookup = ImportScripts::LookupContainer.new
broken_postids = []
broken_real_postids = []
File.foreach("imported_post_ids.txt") do |line|
broken_postids.append(line.to_i)
end
broken_postids.each do |id|
broken_real_postids.append(@lookup.post_id_from_imported_post_id(id))
end
broken_real_postids.each do |id|
puts id
Post.find(id).trash!
end
运行脚本:
su discourse -c 'bundle exec ruby script/import_scripts/fix_visibility.rb'
67406 / 3550728 ( 1.9%) Traceback (most recent call last):
23: from script/import_scripts/vbulletin.rb:1006:in `
22: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
21: from script/import_scripts/vbulletin.rb:88:in `execute'
20: from script/import_scripts/vbulletin.rb:610:in `import_attachments'
19: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/querying.rb:22:in `find_each'
18: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/relation/batches.rb:70:in `find_each'
17: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/relation/batches.rb:137:in `find_in_batches'
16: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/relation/batches.rb:229:in `in_batches'
15: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/relation/batches.rb:229:in `loop'
14: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/relation/batches.rb:245:in `block in in_batches'
13: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/relation/batches.rb:138:in `block in find_in_batches'
12: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/relation/batches.rb:71:in `block in find_each'
11: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/relation/batches.rb:71:in `each'
10: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/relation/batches.rb:71:in `block (2 levels) in find_each'
9: from script/import_scripts/vbulletin.rb:651:in `block in import_attachments'
8: from script/import_scripts/vbulletin.rb:651:in `each'
7: from script/import_scripts/vbulletin.rb:659:in `block (2 levels) in import_attachments'
6: from /var/www/discourse/script/import_scripts/base.rb:873:in `html_for_upload'
5: from /var/www/discourse/script/import_scripts/base/uploader.rb:40:in `html_for_upload'
4: from /var/www/discourse/lib/upload_markdown.rb:10:in `to_markdown'
3: from /var/www/discourse/lib/upload_markdown.rb:19:in `image_markdown'
2: from /var/www/discourse/app/models/upload.rb:206:in `short_url'
1: from /var/www/discourse/app/models/upload.rb:534:in `short_url_basename'
/var/www/discourse/app/models/upload.rb:270:in `base62_sha1': undefined method `hex' for nil:NilClass (NoMethodError)
undefined method `hex’ for nil:NilClass (NoMethodError)
unless mapping[post.id].nil? || mapping[post.id].empty?
mapping[post.id].each do |attachment_id|
upload, filename = find_upload(post, attachment_id)
unless upload
fail_count += 1
next
end
puts "{short_url_basename}"
# internal upload deduplication will make sure that we do not import attachments again
html = html_for_upload(upload, filename)
if !new_raw[html]
new_raw += "\n\n#{html}\n\n"
end
end
end