SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
Rails::Engine




                      @flaviamissi
                flaviamissi.com.br
What is a engine?




                <<
                             slices
engine
What is a engine?
●
    Works exactly as a built-in rails application
●
    Railtie
    ●
        Active Record
    ●
        Active Resource
    ●
        Action Mailer
    ●
        Action Controller
    ●
        Action View
Application -> Engine -> Railtie

   module Rails
         class Application < Engine
         ...
         class Engine < Railtie
         ...
   ...




                        https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb
                        https://github.com/rails/rails/blob/master/railties/lib/rails/engine.rb
http://www.flickr.com/photos/imelda/1022089050/sizes/l/in/photostream/
Creating Our Engine App




     $ rails new MyApp
What you don't need


 $ rm -rf log/
 $ rm -rf tmp/
 $ rm -rf doc/
 $ rm -rf vendor/
 $ rm -rf config/enviroments/
 $ rm -rf config/initializers/ *
 $ rm -rf config/boot.rb *
 $ rm -rf script/ *



                                   * = later!
And We Have Now...
A Simple Blog App




$ rails g scaffold Blog::Post title:string post:text



            namespace!
routes.rb


Engine::Application.routes.draw do



 Rails.application.routes.draw do
config/application.rb


module MyApp
  class Application < Rails::Application




module MyApp
  class Engine < Rails::Engine
Integrating With Another App




$ cp -R ~/my_engine ~/my_app/vendor/plugins/
Integrating With Another App


                                    $ rake routes

blog_posts     GET /blog/posts(.:format)         {:action=>"index", :controller=>"blog/posts"}
               POST /blog/posts(.:format)         {:action=>"create",
                                                               :controller=>"blog/posts"}
new_blog_post GET /blog/posts/new(.:format) {:action=>"new", :controller=>"blog/posts"}
edit_blog_post GET /blog/posts/:id/edit(.:format) {:action=>"edit", :controller=>"blog/posts"}
blog_post      GET /blog/posts/:id(.:format)       {:action=>"show",
                                                               :controller=>"blog/posts"}
               PUT /blog/posts/:id(.:format)      {:action=>"update",
                                                               :controller=>"blog/posts"}
               DELETE /blog/posts/:id(.:format) {:action=>"destroy",
                                                               :controller=>"blog/posts"}
Só isso?!




http://www.flickr.com/photos/bee721/5784266118/
A Problem...



Migrations and everything inside public/
are not available to the main application
The Solution


namespace :engine do
  task :create, :engine do |cmd, args|
     puts "Creating symbolic links..."
     system "mkdir #{Rails.root.to_s}/public/#{args[:engin
     system "ln -s #{Rails.root.to_s}/vendor/plugins/#{arg
     system "ln -s #{Rails.root.to_s}/vendor/plugins/#{arg
     puts "Done!"
  end
end
Some Interesting Links


●
  https://github.com/search?q=rack&type=Everything&repo=&langOverride=&start_
●
  http://akitaonrails.com/2010/05/10/rails-3-introducao-a-engines
●
  http://api.rubyonrails.org/classes/Rails/Engine.html
●
  http://api.rubyonrails.org/classes/Rails/Railtie.html

Más contenido relacionado

La actualidad más candente

Rails Engine :: modularize you app
Rails Engine :: modularize you appRails Engine :: modularize you app
Rails Engine :: modularize you appMuntasim Ahmed
 
Using Angular with Rails
Using Angular with RailsUsing Angular with Rails
Using Angular with RailsJamie Davidson
 
Rails Engine | Modular application
Rails Engine | Modular applicationRails Engine | Modular application
Rails Engine | Modular applicationmirrec
 
Adventurous Merb
Adventurous MerbAdventurous Merb
Adventurous MerbMatt Todd
 
How to set up and test a Rails 3 Engine
How to set up and test a Rails 3 EngineHow to set up and test a Rails 3 Engine
How to set up and test a Rails 3 Enginenicholasf
 
Building a dashboard using AngularJS
Building a dashboard using AngularJSBuilding a dashboard using AngularJS
Building a dashboard using AngularJSRajthilakMCA
 
Rails Engine Patterns
Rails Engine PatternsRails Engine Patterns
Rails Engine PatternsAndy Maleh
 
RoR 101: Session 2
RoR 101: Session 2RoR 101: Session 2
RoR 101: Session 2Rory Gianni
 
Introduction à Ruby
Introduction à RubyIntroduction à Ruby
Introduction à RubyMicrosoft
 
Hello World on Slim Framework 3.x
Hello World on Slim Framework 3.xHello World on Slim Framework 3.x
Hello World on Slim Framework 3.xRyan Szrama
 
Bullet: The Functional PHP Micro-Framework
Bullet: The Functional PHP Micro-FrameworkBullet: The Functional PHP Micro-Framework
Bullet: The Functional PHP Micro-FrameworkVance Lucas
 
Rails 2.3 and Rack - NHRuby Feb 2009
Rails 2.3 and Rack - NHRuby Feb 2009Rails 2.3 and Rack - NHRuby Feb 2009
Rails 2.3 and Rack - NHRuby Feb 2009bturnbull
 
Laravel Restful API and AngularJS
Laravel Restful API and AngularJSLaravel Restful API and AngularJS
Laravel Restful API and AngularJSBlake Newman
 
Using WordPress as your application stack
Using WordPress as your application stackUsing WordPress as your application stack
Using WordPress as your application stackPaul Bearne
 
Laravel - Website Development in Php Framework.
Laravel - Website Development in Php Framework.Laravel - Website Development in Php Framework.
Laravel - Website Development in Php Framework.SWAAM Tech
 
Laravel Beginners Tutorial 2
Laravel Beginners Tutorial 2Laravel Beginners Tutorial 2
Laravel Beginners Tutorial 2Vikas Chauhan
 
Building WordPress Client Side Applications with WP and WP-API - #wcmia
Building WordPress Client Side Applications with WP and WP-API - #wcmiaBuilding WordPress Client Side Applications with WP and WP-API - #wcmia
Building WordPress Client Side Applications with WP and WP-API - #wcmiaRoy Sivan
 
How to build Client Side Applications with WordPress and WP-API | #wcmia
How to build Client Side Applications with WordPress and WP-API | #wcmiaHow to build Client Side Applications with WordPress and WP-API | #wcmia
How to build Client Side Applications with WordPress and WP-API | #wcmiaRoy Sivan
 

La actualidad más candente (20)

Rails Engine :: modularize you app
Rails Engine :: modularize you appRails Engine :: modularize you app
Rails Engine :: modularize you app
 
Rails engines
Rails enginesRails engines
Rails engines
 
Using Angular with Rails
Using Angular with RailsUsing Angular with Rails
Using Angular with Rails
 
Rails Engine | Modular application
Rails Engine | Modular applicationRails Engine | Modular application
Rails Engine | Modular application
 
Adventurous Merb
Adventurous MerbAdventurous Merb
Adventurous Merb
 
How to set up and test a Rails 3 Engine
How to set up and test a Rails 3 EngineHow to set up and test a Rails 3 Engine
How to set up and test a Rails 3 Engine
 
Building a dashboard using AngularJS
Building a dashboard using AngularJSBuilding a dashboard using AngularJS
Building a dashboard using AngularJS
 
Rails Engine Patterns
Rails Engine PatternsRails Engine Patterns
Rails Engine Patterns
 
RoR 101: Session 2
RoR 101: Session 2RoR 101: Session 2
RoR 101: Session 2
 
Introduction à Ruby
Introduction à RubyIntroduction à Ruby
Introduction à Ruby
 
Hello World on Slim Framework 3.x
Hello World on Slim Framework 3.xHello World on Slim Framework 3.x
Hello World on Slim Framework 3.x
 
Bullet: The Functional PHP Micro-Framework
Bullet: The Functional PHP Micro-FrameworkBullet: The Functional PHP Micro-Framework
Bullet: The Functional PHP Micro-Framework
 
Rails 2.3 and Rack - NHRuby Feb 2009
Rails 2.3 and Rack - NHRuby Feb 2009Rails 2.3 and Rack - NHRuby Feb 2009
Rails 2.3 and Rack - NHRuby Feb 2009
 
Laravel Restful API and AngularJS
Laravel Restful API and AngularJSLaravel Restful API and AngularJS
Laravel Restful API and AngularJS
 
Using WordPress as your application stack
Using WordPress as your application stackUsing WordPress as your application stack
Using WordPress as your application stack
 
Laravel - Website Development in Php Framework.
Laravel - Website Development in Php Framework.Laravel - Website Development in Php Framework.
Laravel - Website Development in Php Framework.
 
Laravel Beginners Tutorial 2
Laravel Beginners Tutorial 2Laravel Beginners Tutorial 2
Laravel Beginners Tutorial 2
 
Workshop Laravel 5.2
Workshop Laravel 5.2Workshop Laravel 5.2
Workshop Laravel 5.2
 
Building WordPress Client Side Applications with WP and WP-API - #wcmia
Building WordPress Client Side Applications with WP and WP-API - #wcmiaBuilding WordPress Client Side Applications with WP and WP-API - #wcmia
Building WordPress Client Side Applications with WP and WP-API - #wcmia
 
How to build Client Side Applications with WordPress and WP-API | #wcmia
How to build Client Side Applications with WordPress and WP-API | #wcmiaHow to build Client Side Applications with WordPress and WP-API | #wcmia
How to build Client Side Applications with WordPress and WP-API | #wcmia
 

Similar a Rails::Engine

浜松Rails3道場 其の壱 プロジェクト作成〜Rouging編
浜松Rails3道場 其の壱 プロジェクト作成〜Rouging編浜松Rails3道場 其の壱 プロジェクト作成〜Rouging編
浜松Rails3道場 其の壱 プロジェクト作成〜Rouging編Masakuni Kato
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - IntroductionVagmi Mudumbai
 
Rails Engines - A presentation for the 22nd Athens Ruby Meetup
Rails Engines - A presentation for the 22nd Athens Ruby MeetupRails Engines - A presentation for the 22nd Athens Ruby Meetup
Rails Engines - A presentation for the 22nd Athens Ruby MeetupSkroutz S.A.
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overviewYehuda Katz
 
Rails MVC by Sergiy Koshovyi
Rails MVC by Sergiy KoshovyiRails MVC by Sergiy Koshovyi
Rails MVC by Sergiy KoshovyiPivorak MeetUp
 
Useful Rails Plugins
Useful Rails PluginsUseful Rails Plugins
Useful Rails Pluginsnavjeet
 
ElggCamp Santiago> For Developers!
ElggCamp Santiago> For Developers!ElggCamp Santiago> For Developers!
ElggCamp Santiago> For Developers!Condiminds
 
ElggCamp Santiago - Dev Edition
ElggCamp Santiago - Dev EditionElggCamp Santiago - Dev Edition
ElggCamp Santiago - Dev EditionBrett Profitt
 
using Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'susing Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'sAntônio Roberto Silva
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the FinishYehuda Katz
 
Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2A.K.M. Ahsrafuzzaman
 
Client Side Measurement & Performance With Rails
Client Side Measurement & Performance With RailsClient Side Measurement & Performance With Rails
Client Side Measurement & Performance With RailsEric Falcao
 
Passo a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaPasso a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaJuliano Martins
 
Writing Software not Code with Cucumber
Writing Software not Code with CucumberWriting Software not Code with Cucumber
Writing Software not Code with CucumberBen Mabey
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Phpfunkatron
 

Similar a Rails::Engine (20)

浜松Rails3道場 其の壱 プロジェクト作成〜Rouging編
浜松Rails3道場 其の壱 プロジェクト作成〜Rouging編浜松Rails3道場 其の壱 プロジェクト作成〜Rouging編
浜松Rails3道場 其の壱 プロジェクト作成〜Rouging編
 
Django Vs Rails
Django Vs RailsDjango Vs Rails
Django Vs Rails
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - Introduction
 
Rails Engines - A presentation for the 22nd Athens Ruby Meetup
Rails Engines - A presentation for the 22nd Athens Ruby MeetupRails Engines - A presentation for the 22nd Athens Ruby Meetup
Rails Engines - A presentation for the 22nd Athens Ruby Meetup
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 
Rails MVC by Sergiy Koshovyi
Rails MVC by Sergiy KoshovyiRails MVC by Sergiy Koshovyi
Rails MVC by Sergiy Koshovyi
 
Useful Rails Plugins
Useful Rails PluginsUseful Rails Plugins
Useful Rails Plugins
 
ElggCamp Santiago> For Developers!
ElggCamp Santiago> For Developers!ElggCamp Santiago> For Developers!
ElggCamp Santiago> For Developers!
 
ElggCamp Santiago - Dev Edition
ElggCamp Santiago - Dev EditionElggCamp Santiago - Dev Edition
ElggCamp Santiago - Dev Edition
 
GHC
GHCGHC
GHC
 
using Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'susing Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API's
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
 
Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2Ride on the Fast Track of Web with Ruby on Rails- Part 2
Ride on the Fast Track of Web with Ruby on Rails- Part 2
 
The Rails Way
The Rails WayThe Rails Way
The Rails Way
 
Client Side Measurement & Performance With Rails
Client Side Measurement & Performance With RailsClient Side Measurement & Performance With Rails
Client Side Measurement & Performance With Rails
 
Generators
GeneratorsGenerators
Generators
 
Passo a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaPasso a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel Híbrida
 
Writing Software not Code with Cucumber
Writing Software not Code with CucumberWriting Software not Code with Cucumber
Writing Software not Code with Cucumber
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Php
 
React django
React djangoReact django
React django
 

Más de Flavian Missi

Tdd with-python-and-django
Tdd with-python-and-djangoTdd with-python-and-django
Tdd with-python-and-djangoFlavian Missi
 
Tsuru - plataforma de cloud computing open source
Tsuru - plataforma de cloud computing open sourceTsuru - plataforma de cloud computing open source
Tsuru - plataforma de cloud computing open sourceFlavian Missi
 
Django class based-views
Django class based-viewsDjango class based-views
Django class based-viewsFlavian Missi
 
Modularizing Rails Apps with Cells
Modularizing Rails Apps with CellsModularizing Rails Apps with Cells
Modularizing Rails Apps with CellsFlavian Missi
 

Más de Flavian Missi (6)

Tdd with-python-and-django
Tdd with-python-and-djangoTdd with-python-and-django
Tdd with-python-and-django
 
Profiling em Python
Profiling em PythonProfiling em Python
Profiling em Python
 
Tsuru - plataforma de cloud computing open source
Tsuru - plataforma de cloud computing open sourceTsuru - plataforma de cloud computing open source
Tsuru - plataforma de cloud computing open source
 
Django class based-views
Django class based-viewsDjango class based-views
Django class based-views
 
Modularizing Rails Apps with Cells
Modularizing Rails Apps with CellsModularizing Rails Apps with Cells
Modularizing Rails Apps with Cells
 
Capybara
CapybaraCapybara
Capybara
 

Rails::Engine

  • 1. Rails::Engine @flaviamissi flaviamissi.com.br
  • 2. What is a engine? << slices engine
  • 3. What is a engine? ● Works exactly as a built-in rails application ● Railtie ● Active Record ● Active Resource ● Action Mailer ● Action Controller ● Action View
  • 4. Application -> Engine -> Railtie module Rails class Application < Engine ... class Engine < Railtie ... ... https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb https://github.com/rails/rails/blob/master/railties/lib/rails/engine.rb
  • 6. Creating Our Engine App $ rails new MyApp
  • 7. What you don't need $ rm -rf log/ $ rm -rf tmp/ $ rm -rf doc/ $ rm -rf vendor/ $ rm -rf config/enviroments/ $ rm -rf config/initializers/ * $ rm -rf config/boot.rb * $ rm -rf script/ * * = later!
  • 8. And We Have Now...
  • 9. A Simple Blog App $ rails g scaffold Blog::Post title:string post:text namespace!
  • 11. config/application.rb module MyApp class Application < Rails::Application module MyApp class Engine < Rails::Engine
  • 12. Integrating With Another App $ cp -R ~/my_engine ~/my_app/vendor/plugins/
  • 13. Integrating With Another App $ rake routes blog_posts GET /blog/posts(.:format) {:action=>"index", :controller=>"blog/posts"} POST /blog/posts(.:format) {:action=>"create", :controller=>"blog/posts"} new_blog_post GET /blog/posts/new(.:format) {:action=>"new", :controller=>"blog/posts"} edit_blog_post GET /blog/posts/:id/edit(.:format) {:action=>"edit", :controller=>"blog/posts"} blog_post GET /blog/posts/:id(.:format) {:action=>"show", :controller=>"blog/posts"} PUT /blog/posts/:id(.:format) {:action=>"update", :controller=>"blog/posts"} DELETE /blog/posts/:id(.:format) {:action=>"destroy", :controller=>"blog/posts"}
  • 15. A Problem... Migrations and everything inside public/ are not available to the main application
  • 16. The Solution namespace :engine do task :create, :engine do |cmd, args| puts "Creating symbolic links..." system "mkdir #{Rails.root.to_s}/public/#{args[:engin system "ln -s #{Rails.root.to_s}/vendor/plugins/#{arg system "ln -s #{Rails.root.to_s}/vendor/plugins/#{arg puts "Done!" end end
  • 17. Some Interesting Links ● https://github.com/search?q=rack&type=Everything&repo=&langOverride=&start_ ● http://akitaonrails.com/2010/05/10/rails-3-introducao-a-engines ● http://api.rubyonrails.org/classes/Rails/Engine.html ● http://api.rubyonrails.org/classes/Rails/Railtie.html