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 |
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.