<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Peter's Blog - Nodes for rake</title>
    <link>http://www.petersblog.org/</link>
    <description>Nodes containing the tag rake</description>
    <item>
      <title>Raking in Drupal posts</title>
      <link>http://www.petersblog.org/node/view/1574</link>
      <description>&lt;p&gt;
Rake is the ruby equivalent of make except it is much better in that you are scripting in ruby and not the nasty primeval make language. Rails uses rake a lot as a simple place to gather together a load of administration tasks such as running tests, running database migrations etc. 
&lt;/p&gt;
&lt;p&gt;
When I moved all my drupal blog posts from drupal over to &lt;a href="/tag/petersblogger"&gt;PetersBlogger&lt;/a&gt; I decided to use a nice organised rake script rather than do my usual practise of having a directory full of utility scripts. 
&lt;/p&gt;
&lt;p&gt;
In my rails installation I created a file called lib/tasks/jobs.rake and in it I put my import code: 
&lt;/p&gt;
&lt;pre class="lazy"&gt;&lt;span class="line-numbers"&gt;   1 &lt;/span&gt; task (&lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;import_drupal&lt;/span&gt; =&amp;gt; &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;environment&lt;/span&gt;) &lt;span class="Keyword"&gt;do&lt;/span&gt;
&lt;span class="line-numbers"&gt;   2 &lt;/span&gt;   print &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;Importing Drupal&lt;span class="Constant"&gt;\n&lt;/span&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;   3 &lt;/span&gt;   oTagTable &lt;span class="Keyword"&gt;=&lt;/span&gt; {}
&lt;span class="line-numbers"&gt;   4 &lt;/span&gt; &lt;span class="Comment"&gt;  &lt;span class="Comment"&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;   5 &lt;/span&gt; &lt;span class="Comment"&gt;  &lt;span class="Comment"&gt;#&lt;/span&gt; Import all the articles.&lt;/span&gt;
&lt;span class="line-numbers"&gt;   6 &lt;/span&gt; &lt;span class="Comment"&gt;  &lt;span class="Comment"&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;   7 &lt;/span&gt;   &lt;span class="Support"&gt;Drupal&lt;/span&gt;::&lt;span class="Entity"&gt;Article&lt;/span&gt;.&lt;span class="Entity"&gt;find&lt;/span&gt;(&lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;all&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;conditions&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;type &amp;lt;&amp;gt; 'image'&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;).&lt;span class="Entity"&gt;each&lt;/span&gt; &lt;span class="Keyword"&gt;do &lt;/span&gt;|&lt;span class="Variable"&gt;oArticle&lt;/span&gt;|
&lt;span class="line-numbers"&gt;   8 &lt;/span&gt;     print &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;span class="String"&gt;&lt;span class="String"&gt;#{&lt;/span&gt;oArticle&lt;span class="String"&gt;&lt;span class="String"&gt;.&lt;/span&gt;&lt;span class="Entity"&gt;title&lt;/span&gt;&lt;/span&gt;&lt;span class="String"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="Constant"&gt;\n&lt;/span&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;   9 &lt;/span&gt;     oTime &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Time&lt;/span&gt;.&lt;span class="Entity"&gt;at&lt;/span&gt;( oArticle.&lt;span class="Entity"&gt;created&lt;/span&gt;)
&lt;span class="line-numbers"&gt;  10 &lt;/span&gt;     oPost &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Post&lt;/span&gt;.&lt;span class="Entity"&gt;create&lt;/span&gt;( &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;nid&lt;/span&gt; =&amp;gt; oArticle.&lt;span class="Entity"&gt;nid&lt;/span&gt;,
&lt;span class="line-numbers"&gt;  11 &lt;/span&gt;                         &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;title&lt;/span&gt; =&amp;gt; oArticle.&lt;span class="Entity"&gt;title&lt;/span&gt;,
&lt;span class="line-numbers"&gt;  12 &lt;/span&gt;       &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;body&lt;/span&gt; =&amp;gt; oArticle.&lt;span class="Entity"&gt;body&lt;/span&gt;,
&lt;span class="line-numbers"&gt;  13 &lt;/span&gt;       &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;created&lt;/span&gt; =&amp;gt; oTime)
&lt;span class="line-numbers"&gt;  14 &lt;/span&gt; 
&lt;span class="line-numbers"&gt;  15 &lt;/span&gt; &lt;span class="Comment"&gt;    &lt;span class="Comment"&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  16 &lt;/span&gt; &lt;span class="Comment"&gt;    &lt;span class="Comment"&gt;#&lt;/span&gt; import the tags related to the article.&lt;/span&gt;
&lt;span class="line-numbers"&gt;  17 &lt;/span&gt; &lt;span class="Comment"&gt;    &lt;span class="Comment"&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  18 &lt;/span&gt;     oArticle.&lt;span class="Entity"&gt;tags&lt;/span&gt;.&lt;span class="Entity"&gt;each&lt;/span&gt; &lt;span class="Keyword"&gt;do &lt;/span&gt;|&lt;span class="Variable"&gt;oTag&lt;/span&gt;|
&lt;span class="line-numbers"&gt;  19 &lt;/span&gt;       &lt;span class="Keyword"&gt;if&lt;/span&gt; oTagTable[oTag.&lt;span class="Entity"&gt;tag&lt;/span&gt;]
&lt;span class="line-numbers"&gt;  20 &lt;/span&gt;         oNewTag &lt;span class="Keyword"&gt;=&lt;/span&gt; oTagTable[oTag.&lt;span class="Entity"&gt;tag&lt;/span&gt;]
&lt;span class="line-numbers"&gt;  21 &lt;/span&gt;       &lt;span class="Keyword"&gt;else&lt;/span&gt;
&lt;span class="line-numbers"&gt;  22 &lt;/span&gt;         oNewTag &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Tag&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt;( &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;tag&lt;/span&gt;=&amp;gt;oTag.&lt;span class="Entity"&gt;tag&lt;/span&gt;)
&lt;span class="line-numbers"&gt;  23 &lt;/span&gt;         oTagTable[oTag.&lt;span class="Entity"&gt;tag&lt;/span&gt;] &lt;span class="Keyword"&gt;=&lt;/span&gt; oNewTag
&lt;span class="line-numbers"&gt;  24 &lt;/span&gt;       &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="line-numbers"&gt;  25 &lt;/span&gt; 
&lt;span class="line-numbers"&gt;  26 &lt;/span&gt;       oPost.&lt;span class="Entity"&gt;tags&lt;/span&gt; &lt;span class="Keyword"&gt;&amp;lt;&amp;lt;&lt;/span&gt; oNewTag
&lt;span class="line-numbers"&gt;  27 &lt;/span&gt;     &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="line-numbers"&gt;  28 &lt;/span&gt; 
&lt;span class="line-numbers"&gt;  29 &lt;/span&gt; &lt;span class="Comment"&gt;    &lt;span class="Comment"&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  30 &lt;/span&gt; &lt;span class="Comment"&gt;    &lt;span class="Comment"&gt;#&lt;/span&gt; Import the comments for the article.&lt;/span&gt;
&lt;span class="line-numbers"&gt;  31 &lt;/span&gt; &lt;span class="Comment"&gt;    &lt;span class="Comment"&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  32 &lt;/span&gt;     oArticle.&lt;span class="Entity"&gt;comments&lt;/span&gt;.&lt;span class="Entity"&gt;each&lt;/span&gt; &lt;span class="Keyword"&gt;do &lt;/span&gt;|&lt;span class="Variable"&gt;oComment&lt;/span&gt;|
&lt;span class="line-numbers"&gt;  33 &lt;/span&gt;       strWho &lt;span class="Keyword"&gt;=&lt;/span&gt; oComment.&lt;span class="Entity"&gt;name&lt;/span&gt;
&lt;span class="line-numbers"&gt;  34 &lt;/span&gt;       strComment &lt;span class="Keyword"&gt;=&lt;/span&gt; oComment.&lt;span class="Entity"&gt;comment&lt;/span&gt;
&lt;span class="line-numbers"&gt;  35 &lt;/span&gt;       &lt;span class="Keyword"&gt;if&lt;/span&gt; strWho &lt;span class="Keyword"&gt;==&lt;/span&gt; &lt;span class="Constant"&gt;nil&lt;/span&gt; &lt;span class="Keyword"&gt;or&lt;/span&gt; strWho &lt;span class="Keyword"&gt;==&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  36 &lt;/span&gt;         strWho &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;Peter&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  37 &lt;/span&gt;       &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="line-numbers"&gt;  38 &lt;/span&gt;       &lt;span class="Keyword"&gt;if&lt;/span&gt; strComment &lt;span class="Keyword"&gt;==&lt;/span&gt; &lt;span class="Constant"&gt;nil&lt;/span&gt; &lt;span class="Keyword"&gt;or&lt;/span&gt; strComment.&lt;span class="Entity"&gt;strip&lt;/span&gt; &lt;span class="Keyword"&gt;==&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  39 &lt;/span&gt;         strComment &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;{nothing to say}&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  40 &lt;/span&gt;       &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="line-numbers"&gt;  41 &lt;/span&gt;       oPost.&lt;span class="Entity"&gt;comments&lt;/span&gt; &lt;span class="Keyword"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="Support"&gt;Comment&lt;/span&gt;.&lt;span class="Entity"&gt;create&lt;/span&gt;( &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;who&lt;/span&gt; =&amp;gt; strWho,
&lt;span class="line-numbers"&gt;  42 &lt;/span&gt;           &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;body&lt;/span&gt; =&amp;gt; strComment,
&lt;span class="line-numbers"&gt;  43 &lt;/span&gt;           &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;created&lt;/span&gt; =&amp;gt; &lt;span class="Support"&gt;Time&lt;/span&gt;.&lt;span class="Entity"&gt;at&lt;/span&gt;( oComment.&lt;span class="Entity"&gt;timestamp&lt;/span&gt;), &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;published&lt;/span&gt; =&amp;gt; &lt;span class="Constant"&gt;1&lt;/span&gt;)
&lt;span class="line-numbers"&gt;  44 &lt;/span&gt;       &lt;span class="Keyword"&gt;if&lt;/span&gt; &lt;span class="Keyword"&gt;not&lt;/span&gt; oPost.&lt;span class="Entity"&gt;comments&lt;/span&gt;[&lt;span class="Keyword"&gt;-&lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;].&lt;span class="Entity"&gt;valid?&lt;/span&gt;
&lt;span class="line-numbers"&gt;  45 &lt;/span&gt;         p oPost.&lt;span class="Entity"&gt;comments&lt;/span&gt;[&lt;span class="Keyword"&gt;-&lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;]
&lt;span class="line-numbers"&gt;  46 &lt;/span&gt;         p oPost.&lt;span class="Entity"&gt;comments&lt;/span&gt;[&lt;span class="Keyword"&gt;-&lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;].&lt;span class="Entity"&gt;errors&lt;/span&gt;
&lt;span class="line-numbers"&gt;  47 &lt;/span&gt;       &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="line-numbers"&gt;  48 &lt;/span&gt;     &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="line-numbers"&gt;  49 &lt;/span&gt; 
&lt;span class="line-numbers"&gt;  50 &lt;/span&gt;     oPost.&lt;span class="Entity"&gt;save!&lt;/span&gt;
&lt;span class="line-numbers"&gt;  51 &lt;/span&gt;   &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="line-numbers"&gt;  52 &lt;/span&gt; &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;
This creates a rake task called 'import_drupal' which I can invoke simply by running 
&lt;/p&gt;
&lt;pre class="lazy"&gt;rake import_drupal
&lt;/pre&gt;
&lt;p&gt;
The task runs with the appropriate rails environment so all my models are in place. I had to create a model to access the records in the drupal database thus: 
&lt;/p&gt;
&lt;pre class="lazy"&gt;&lt;span class="line-numbers"&gt;   1 &lt;/span&gt; &lt;span class="Keyword"&gt;module&lt;/span&gt; &lt;span class="Entity"&gt;Drupal&lt;/span&gt;
&lt;span class="line-numbers"&gt;   2 &lt;/span&gt;   &lt;span class="Keyword"&gt;class&lt;/span&gt; &lt;span class="Entity"&gt;Comment&lt;span class="Superclass"&gt; &lt;span class="Superclass"&gt;&amp;lt;&lt;/span&gt; ActiveRecord::Base&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;   3 &lt;/span&gt;     establish_connection configurations[&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;drupal&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;]
&lt;span class="line-numbers"&gt;   4 &lt;/span&gt;     set_table_name &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;comments&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;   5 &lt;/span&gt;   &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="line-numbers"&gt;   6 &lt;/span&gt;   &lt;span class="Keyword"&gt;class&lt;/span&gt; &lt;span class="Entity"&gt;Tag&lt;span class="Superclass"&gt; &lt;span class="Superclass"&gt;&amp;lt;&lt;/span&gt; ActiveRecord::Base&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;   7 &lt;/span&gt;     establish_connection configurations[&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;drupal&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;]
&lt;span class="line-numbers"&gt;   8 &lt;/span&gt;     set_primary_key &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;tid&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;   9 &lt;/span&gt;     has_and_belongs_to_many &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;articles&lt;/span&gt;,
&lt;span class="line-numbers"&gt;  10 &lt;/span&gt;       &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;class_name&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;Drupal::Article&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;,
&lt;span class="line-numbers"&gt;  11 &lt;/span&gt;       &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;join_table&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;awtags_node&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;,
&lt;span class="line-numbers"&gt;  12 &lt;/span&gt;       &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;foreign_key&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;tid&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;,
&lt;span class="line-numbers"&gt;  13 &lt;/span&gt;       &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;association_foreign_key&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;nid&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  14 &lt;/span&gt;     set_table_name &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;awtags&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  15 &lt;/span&gt;   &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="line-numbers"&gt;  16 &lt;/span&gt;   &lt;span class="Keyword"&gt;class&lt;/span&gt; &lt;span class="Entity"&gt;Article&lt;span class="Superclass"&gt; &lt;span class="Superclass"&gt;&amp;lt;&lt;/span&gt; ActiveRecord::Base&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  17 &lt;/span&gt;     establish_connection configurations[&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;drupal&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;]
&lt;span class="line-numbers"&gt;  18 &lt;/span&gt;     set_primary_key &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;nid&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  19 &lt;/span&gt;     &lt;span class="Variable"&gt;self&lt;/span&gt;.&lt;span class="Entity"&gt;inheritance_column&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;poopy&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  20 &lt;/span&gt;     has_many &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;comments&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;table_name&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;comments&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;foreign_key&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;nid&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;class_name&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;Drupal::Comment&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  21 &lt;/span&gt;     has_and_belongs_to_many &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;tags&lt;/span&gt;,
&lt;span class="line-numbers"&gt;  22 &lt;/span&gt;       &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;class_name&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;Drupal::Tag&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;,
&lt;span class="line-numbers"&gt;  23 &lt;/span&gt;       &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;join_table&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;awtags_node&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;,
&lt;span class="line-numbers"&gt;  24 &lt;/span&gt;       &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;foreign_key&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;nid&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;,
&lt;span class="line-numbers"&gt;  25 &lt;/span&gt;       &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;association_foreign_key&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;tid&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  26 &lt;/span&gt;     set_table_name &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;node&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="line-numbers"&gt;  27 &lt;/span&gt;   &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="line-numbers"&gt;  28 &lt;/span&gt; &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;
This model handles all the relationships between the records, including the has_and_belongs_to_many relationship between posts and tags (provided by &lt;a href="/tag/awtags"&gt;awtags&lt;/a&gt;). 
&lt;/p&gt;
&lt;p&gt;
I needed an entry in config/database.yml to define the connection to the drupal database: 
&lt;/p&gt;
&lt;pre class="lazy"&gt;drupal:
  adapter: mysql
  database: petersblog
  username: secret
  password: doyouthinkidpostithere
&lt;/pre&gt;
&lt;p&gt;
and it all works nicely. If I invoke it thusly: 
&lt;/p&gt;
&lt;pre class="lazy"&gt;rake import_drupal RAILS_ENV=production
&lt;/pre&gt;
&lt;p&gt;
then it will import the posts into the rails production database. 
&lt;/p&gt;
&lt;p&gt;
I'm giving away a few of my schema secrets here which pedantic rails developers might leap on, specifically I have used my own fields called 'nid' and 'created' to perform roles that rails already provides 'id' and 'created_on' for. The reason for the duplication was that during development I was having problems setting these fields to the values from the drupal database, rails was insisting on giving them it's own values. By having my own fields I had total control. There are no doubt ways around this but I didn't have time to find them (although I did find other people moaning about the same problem). 
&lt;/p&gt;
&lt;p&gt;
And that's how I managed to save 1500 posts from the hell that is php. 
&lt;/p&gt;&lt;p&gt;Related Posts: &lt;a href="/tag/petersblogger"&gt;petersblogger&lt;/a&gt; &lt;a href="/tag/rails"&gt;rails&lt;/a&gt; &lt;a href="/tag/rake"&gt;rake&lt;/a&gt;&lt;/p&gt;</description>
      <guid>http://www.petersblog.org/node/view/1574</guid>
      <category domain="http://www.technorati.com/tag">petersblogger</category>
      <category domain="http://www.technorati.com/tag">rails</category>
      <category domain="http://www.technorati.com/tag">rake</category>
    </item>
  </channel>
</rss>
