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