Rails::Railtie – Hook Everything

After Rails 3 released I have been trying to find major and important changes in rails framework over 2.x version. The change I like most is Rails Railtie. Using Railtie you can configure your own gem or plugin in a rails application according to your choice in boot process.  If you are a plugin developer, you can use Railtie class that is capable of loading generators, tasks, middlewares and adding subscribers.

Rails::Engine is nothing more than a Railtie and it has some initializers already set and Rails::Application and Rails::Plugin are also engines. Any subclass of Railtie can be use to initialize rails application, so your plugin can be a first class member of rails application.

Here is sample plugin Railtie that will be loaded when your rails application boots.

require 'rails'
class MyPlugin < Rails::Railtie
  # railtie code goes here
end

Here I will give you some examples of Railtie methods, how to customize and extend your rails application using your plugin or gem library.

1) generators

Rails will require any generators if you have require generator path in your Railtie class within generators block.

generators do
  require 'lib/to/generator.rb'
end

2) rake_tasks

You can ship rake tasks of your plugin in rails application if you require in Railtie

rake_tasks do 
  require 'lib/to/rake_task.rb'
end

3) initializer

Railtie initializer method can create initializers that can run during the Rails boot process. It has the options to run a initializer before or after a specific initializer.

initializer "plugin_railtie.boot_plugin" do
  Plugin.boot(NewPlugin)
end

initializer "new_plugin_railtie.boot_new_plugin", :before => "plugin_railtie.boot_plugin" do
    NewPlugin.boot!
end

4) console

console method allows to add code that will run when Rails console starts.

 console do
   puts "my plugin loaded."
 end