On 04.02.2009, at 18:57, Morgan Sutherland wrote:

How did you go about deleting spam messages?


we manually deleted the existing spam messages in the database, since the db grew too big and the export would take too long.

if somebody tries to redo this manually, keep the following in mind:
the data in the db is connected/linked, so when deleting rows from tables, make sure to not destroy the database integrity. the best approach to deal with the data is via the script/console.

backup your database before interacting with the data!

1. invoke with 'ruby script/console production' in the instiki root
2. get the page you want to alter

>> mypage=Page.find_by_name('HomePage')

3. check how much revisions you've got

>> mypage.revisions.count
=> 202

4. either delete all the versions but one (leave at least one revision! else your data integrity is gone!)

>> mypage.revisions.each {|r| mypage.revisions.reload; r.destroy if mypage.revisions.count.to_i>1}
>> mypage.revisions.reload
>> mypage.revisions.count
=> 1

(keep in mind that on the website, the changes might be not visible immediately because of caching. delete everything in /cache to get the site to rebuild.

if you accidentally deleted all the revisions of your page and get error 500's:

>> mypage=Page.find_by_name('HomePage')
>> mypage .revisions .create (:revised_at=>Time.now,:author=>Author.new('console','127.0.0.1'))
>> mypage.save!
=> true

5. selectively delete revisions:

# delete all revisions systemwide that contain the word "v1agra"
>> Page.find(:all).each {|p| p.revisions.each {|r| r.destroy if r.content.include? "V1agra" }}

# delete all revisions systemwide that from the ip 55.55.55.55
>> Page.find(:all).each {|p| p.revisions.each{|r| r.destroy if r.ip=="55.55.55.55" }}



# make sure that you don't have any pages without revisions afterwards

# either restore empty revisions
>> Page.find(:all).each {|p| p .revisions .create (:revised_at=>Time.now,:author=>Author.new('console','127.0.0.1')) if p.revisions.size == 0}

# or also delete the corresponding Pages without revisions
>> Page.find(:all).each {|p| p.destroy if p.revisions.size == 0}



in the next version of instiki there will be a "delete" functionality, but i am thinking of also implementing a delete-option for versions (revisions) soon, since databases can grow huge if there are lots of rollbacks.

another idea would be something like an "administrative rollback" or "hard rollback" that deletes all previous versions between the current entry and the to-be-rolled-back entry, anyone interested in such a functionality?

-m
_______________________________________________
Instiki-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/instiki-users

Reply via email to