Hacktastic! Radiant CMS Static Deployment

Posted by on May 7, 2009

Right or wrong, I’m using Radiant CMS for a static website that will change very infrequently.  I’ll be the one administering those changes and therefore won’t need a publically accessible admin for managing the content.  Oh… and I’m cheap and lazy.  I don’t want to pay for ruby hosting resources and I don’t want to have to deploy another rails site (although it’s not too difficult anymore).

Maybe Radiant’s not the best choice for this, but it was a prime opportunity to dabble and learn.  Along with learning Radiant I’ve also had to learn how to deploy it statically.  I was under the impression that there was an extension to do this already, but after spending a short time looking I decided to hack out my own non-extension.

It’s a combination of using wget and doing a little file movement & renaming to accomodate an HTTP server:

#!/usr/bin/ruby
 
# cp_radiant.rb
 
require 'fileutils'
 
def process_dir(dir_path)
  Dir.chdir(dir_path) do
    (all=Dir["*"]).each do |file_name|
      if File.directory?(file_name)
        if all.include?(source_index="#{file_name}.html")
          FileUtils.cp("#{source_index}", (dest_index=File.join(file_name, "index.html")))
          puts "...RESTRUCTURED #{source_index} to #{dest_index}"
        end
        process_dir(File.expand_path(file_name))
      end
    end
  end
end
 
if(url = ARGV.first)
  puts "FETCHING SITE... #{url}"
  `wget -E --no-verbose --no-cache --mirror #{url}`
 
  puts
  puts
  result_dir = File.join(Dir.pwd, url.gsub(/http:\/\//,''))
  puts "POST PROCESSING #{result_dir}"
  process_dir(result_dir)
else
  puts "MISSING URL ARGUMENT"
end

Using it like so will copy the entire site down locally in a new directory named “http://localhost:3000″:

ruby cp_radiant.rb http://localhost:3000

I’m also using Apache as my HTTP server and have added the following entry to my .htaccess file to accommodate URLs without the file extension:

   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteRule ^([^\.]+)$ $1.html [NC,L]

Once again… this is just a hack to get something done, but I figure it may help someone else with their misuse of Radiant.

Enjoy!

4 Comments on Hacktastic! Radiant CMS Static Deployment

Respond | Trackback

  1. Ha. Crazy! I’ve been tempted too.

  2. This is kind of cool, easy and cool hack.

    What I was just thinking about the other day was similar idea, but a bit more user friendly. As Radiant (and Rails in general) tend to eat tones of RAM, I’d like to spawn Radiant only when user tries to log in/make changes to site, and then shut it down and serve static files only after that.

    Maybe one day I will implement this and let you know ;).

  3. hosiawak says:

    @Hubert: If you’re using Passenger the spawning/killing of inactive apps is already there, there’s no point in reinventing the wheel.

  4. [...] more here:  Hacktastic! Radiant CMS Static Deployment - pillowfactory.org By admin | category: Object, Radiant CMS | tags: allows-customization, change-very, cms, [...]

Respond

Comments

Comments: