I got a comment the other day asking how I converted to WordPress from Mephisto while keeping my comments and everything intact. If you are familiar with Ruby on Rails, this response will make sense. If you are not, I recommend learning it…then this response will make sense.
In a nutshell, I used Mephisto for the conversion. First I spent about a week mapping Mephisto’s DB to WordPress’ DB. I went straight into the Mephisto Rails project and created a new model that pointed to my newly created WordPress database. I then created a controller in Mephisto that looked exactly like this:
(note: if this is a pain to read, you can also view it here)
class MephistoController < ApplicationController def index start_time = Time.now logger.info 'querying mephisto articles' @articles = Content.find(:all, :conditions=>"article_id IS NULL") logger.info 'querying mephisto comments' @comments = Content.find( :all, :conditions=>"article_id IS NOT NULL") logger.info 'querying mephisto taggings' @taggings = Tagging.find(:all) logger.info 'querying mephisto tags' @tags = Tag.find(:all) logger.info 'processing terms' for tag in @tags @wp_term = WpTerm.new @wp_term.term_id = tag.id @wp_term.name = tag.name @wp_term.slug = tag.name.downcase.gsub(" ","_") @wp_term.term_group = 0 @wp_term.save end logger.info 'processing term relationships' for tagging in @taggings @wp_tr = WpTermRelationships.new @wp_tr.term_taxonomy_id = tagging.tag_id @wp_tr.object_id = tagging.taggable_id @wp_tr.save end logger.info 'processing term taxonomy' for tag in @tags c = Tagging.count(:all, :conditions=>"tag_id = #{tag.id}") @wp_tt = WpTermTaxonomy.new @wp_tt.term_taxonomy_id = tag.id @wp_tt.term_id = tag.id @wp_tt.taxonomy = "post_tag" @wp_tt.parent = 0 @wp_tt.count = c @wp_tt.save end logger.info 'processing posts' for article in @articles c = Content.count(:all, :conditions=>"article_id = #{article.id}") @wp_post = WpPost.new @wp_post.ID = article.id @wp_post.post_author = 1 @wp_post.post_date = article.published_at-7.hours @wp_post.post_date_gmt = article.published_at @wp_post.post_content = article.body @wp_post.post_title = article.title @wp_post.post_category = 39 @wp_post.post_status = "publish" @wp_post.post_status = "open" @wp_post.ping_status = "closed" @wp_post.post_name = article.permalink @wp_post.post_modified = article.updated_at-7.hours @wp_post.post_modified_gmt = article.updated_at @wp_post.post_parent = 0 @wp_post.guid = article.published_at.strftime("http://blog.gillumiante.com/%Y/%m/%d/")+article.permalink @wp_post.menu_order = 0 @wp_post.post_type = "post" @wp_post.comment_count = c @wp_post.save end logger.info 'processing comments' for comment in @comments @wp_com = WpComment.new @wp_com.comment_ID = comment.id @wp_com.comment_post_ID = comment.article_id @wp_com.comment_author = comment.author @wp_com.comment_author_email = comment.author_email if comment.author_url == nil comment.author_url = "" end @wp_com.comment_author_url = comment.author_url @wp_com.comment_author_IP = comment.author_ip @wp_com.comment_date = comment.published_at-7.hours @wp_com.comment_date_gmt = comment.published_at @wp_com.comment_content = comment.body @wp_com.comment_karma = 0 @wp_com.comment_approved = '1' @wp_com.comment_parent = 0 @wp_com.user_id = 0 @wp_com.save end logger.info 'finished!' end_time = Time.now @lapsed = end_time-start_time render :layout=>false end end |
I then proceeded to visit the /mephisto/index page on my mephisto blog, which fired this baby off. It took all of about 9 seconds to complete.
I realize the irony of using Mephisto in order to abandon it. But in the end, I wasn’t switching from the Rails based app because of Rails, but because of the app. I am still in love with rails and as you can see, this project would have taken me a lot longer to accomplish had I attempted to write it in PHP, the language of WordPress.