rails::engine

17
Rails::Engine @flaviamissi flaviamissi.com.br

Upload: flavia-missi

Post on 18-May-2015

3.989 views

Category:

Documents


0 download

DESCRIPTION

Introduction to Rails Engines

TRANSCRIPT

Page 1: Rails::Engine

Rails::Engine

@flaviamissiflaviamissi.com.br

Page 2: Rails::Engine

What is a engine?

<<slices

engine

Page 3: Rails::Engine

● Works exactly as a built-in rails application● Railtie

● Active Record● Active Resource● Action Mailer● Action Controller● Action View

What is a engine?

Page 4: Rails::Engine

module Rails

...

class Application < Engine

https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb

Application -> Engine -> Railtie

https://github.com/rails/rails/blob/master/railties/lib/rails/engine.rb

class Engine < Railtie

...

...

Page 5: Rails::Engine

http://www.flickr.com/photos/imelda/1022089050/sizes/l/in/photostream/

Page 6: Rails::Engine

Creating Our Engine App

$ rails new MyApp

Page 7: Rails::Engine

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!

Page 8: Rails::Engine

And We Have Now...

Page 9: Rails::Engine

A Simple Blog App

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

namespace!

Page 10: Rails::Engine

routes.rb

Rails.application.routes.draw do

Engine::Application.routes.draw do

Page 11: Rails::Engine

config/application.rb

module MyAppclass Application < Rails::Application

module MyAppclass Engine < Rails::Engine

Page 12: Rails::Engine

Integrating With Another App

$ cp -R ~/my_engine ~/my_app/vendor/plugins/

Page 13: Rails::Engine

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"}

Page 14: Rails::Engine

Só isso?!

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

Page 15: Rails::Engine

A Problem...

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

Page 16: Rails::Engine

The Solution

namespace :engine dotask :create, :engine do |cmd, args|

puts "Creating symbolic links..."system "mkdir #{Rails.root.to_s}/public/#{args[:engine]}"system "ln -s #{Rails.root.to_s}/vendor/plugins/#{args[:engine]}/public/* #{Rails.root.to_s}/public/#{args[:engine]}"system "ln -s #{Rails.root.to_s}/vendor/plugins/#{args[:engine]}/db/migrate/* #{Rails.root.to_s}/db/migrate/"puts "Done!"

endend

Page 17: Rails::Engine

Some Interesting Links

● https://github.com/search?q=rack&type=Everything&repo=&langOverride=&start_value=1● 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