Rails Plug-in Package Task

RailsPluginPackageTask is a rake task designed to automate the publishing of Ruby on Rails plug-ins. The Rails plug-in installer RecursiveHTTPFetcher makes certain assumptions about the web servers that does not hold through from server to server, for example:

  • Server generates an index page with links

  • All links to plug-in files are relative links

  • Folder links end with a forward slash (used to recurse)

RubyForge web server is an example of where these assupmtions don’t hold true. As a result, you can not simply copy your files to a web server and expect Rails HTTP plugin installer to just work.

This Rake task helps fill the gap by complying to the plug-in scripts assumptions. Following the Rake package task conventions, it defines the “rails_plugin” task that recurses through your package_files, generates compliant index.html for each folder (that contains a file), and creates a directory structure that you can publish as a set for your plugin.

Example

The following example uses the Rake::RailsPluginPackageTask to create the package. It then uses the Rake::SshDirPublisher to publish the plugin directory to RubyForge.

Rake::RailsPluginPackageTask.new(ProjectInfo[:name], ProjectInfo[:version]) do |p|
  p.package_files = PluginPackageFiles
  p.plugin_files = FileList["rails_plugin/**/*"]
  p.extra_links = {"Project page"=>ProjectInfo[:homepage],
    "Author: #{ProjectInfo[:author_name]}"=>ProjectInfo[:author_link]}
  p.verbose = true
end
task :rails_plugin=>:clobber

desc "Publish Ruby on Rails plug-in on RubyForge"
task :release_plugin=>:rails_plugin do |task|
  pub = Rake::SshDirPublisher.new("#{RubyForgeConfig[:user_name]}@rubyforge.org",
   "/var/www/gforge-projects/#{RubyForgeConfig[:unix_name]}",
   "pkg/rails_plugin")
  pub.upload()
end