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