Slide 1

Slide 1 text

RAILS ENGINES MICRO SERVICES AS A WAY TO

Slide 2

Slide 2 text

LUCAS ALENCAR @lucasalencar @alencar.lucas.a @lucasandre

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

MONOLITHIC ARCHITECTURE

Slide 8

Slide 8 text

LEVEL OF ABSTRACTION WE ARE MAYBE MISSING A

Slide 9

Slide 9 text

CLASSES METHODS MODULES ????????

Slide 10

Slide 10 text

CLASSES METHODS MODULES SERVICES

Slide 11

Slide 11 text

MICRO SERVICES

Slide 12

Slide 12 text

I HATE DEVOPS!

Slide 13

Slide 13 text

I’M LAZY…

Slide 14

Slide 14 text

RAILS ENGINES

Slide 15

Slide 15 text

MICRO SERVICES STARTS AT CODE

Slide 16

Slide 16 text

DECOUPLING STARTS AT CODE

Slide 17

Slide 17 text

RAILS ENGINES ARE NOT MICRO SERVICES

Slide 18

Slide 18 text

RAILS ENGINES ARE NOT MICRO SERVICES (YET)

Slide 19

Slide 19 text

IMPROVED Communication Collaboration Creation Maintenance Comprehension

Slide 20

Slide 20 text

RD STATION EMAIL MARKETING LANDING PAGES SOCIAL MEDIA POSTS MARKETING BI LEADS MANAGEMENT SEGMENTATION

Slide 21

Slide 21 text

EMAIL MARKETING LANDING PAGES SOCIAL MEDIA POSTS LEADS MANAGEMENT SEGMENTATION LEADS IMPORT MARKETING AUTOMATION EMAILS CUSTOM FIELDS SOCIAL MEDIAS DASHBOARD

Slide 22

Slide 22 text

EMAIL MARKETING LANDING PAGES SOCIAL MEDIA POSTS LEADS MANAGEMENT SEGMENTATION LEADS IMPORT MARKETING AUTOMATION EMAILS CUSTOM FIELDS SOCIAL MEDIAS DASHBOARD

Slide 23

Slide 23 text

EMAIL MARKETING LANDING PAGES SOCIAL MEDIA POSTS LEADS MANAGEMENT SEGMENTATION LEADS IMPORT MARKETING AUTOMATION EMAILS CUSTOM FIELDS SOCIAL MEDIAS DASHBOARD

Slide 24

Slide 24 text

EMAIL MARKETING LANDING PAGES SOCIAL MEDIA POSTS LEADS MANAGEMENT SEGMENTATION LEADS IMPORT MARKETING AUTOMATION EMAILS CUSTOM FIELDS SOCIAL MEDIAS DASHBOARD

Slide 25

Slide 25 text

EMAIL MARKETING LANDING PAGES SOCIAL MEDIA POSTS LEADS MANAGEMENT SEGMENTATION LEADS IMPORT MARKETING AUTOMATION EMAILS CUSTOM FIELDS SOCIAL MEDIAS DASHBOARD

Slide 26

Slide 26 text

EMAIL MARKETING LANDING PAGES SOCIAL MEDIA POSTS LEADS MANAGEMENT SEGMENTATION LEADS IMPORT MARKETING AUTOMATION EMAILS CUSTOM FIELDS SOCIAL MEDIAS DASHBOARD

Slide 27

Slide 27 text

EMAIL MARKETING LANDING PAGES SOCIAL MEDIA POSTS LEADS MANAGEMENT SEGMENTATION LEADS IMPORT MARKETING AUTOMATION EMAILS CUSTOM FIELDS SOCIAL MEDIAS DASHBOARD

Slide 28

Slide 28 text

ARE FREE* RAILS ENGINES * Sort of…

Slide 29

Slide 29 text

HOW CAN I DO IT?

Slide 30

Slide 30 text

~/code rails plugin new engines/engineX --mountable create create README.rdoc create Rakefile create engine_x.gemspec create MIT-LICENSE create .gitignore create Gemfile create app create app/controllers/engine_x/application_controller.rb create app/helpers/engine_x/application_helper.rb create app/mailers create app/models create app/views/layouts/engine_x/application.html.erb create app/assets/images/engine_x create app/assets/images/engine_x/.keep create config/routes.rb create lib/engine_x.rb create lib/tasks/engine_x_tasks.rake

Slide 31

Slide 31 text

SINGLE REPOSITORY MULTIPLE REPOSITORIES

Slide 32

Slide 32 text

. ├── app ├── bin ├── config ├── db ├── engines │ ├── engineX │ ├── engineY │ └── engineZ ├── lib ├── public ├── test └── tmp

Slide 33

Slide 33 text

1 source 'https://rubygems.org' 2 3 path './engines' do 4 gem 'engineX' 5 gem 'engineY' 6 gem 'engineZ' 7 end 8 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NORMAL Gemfile

Slide 34

Slide 34 text

WHY NOT USE OUR GOOD OLD GEMS?

Slide 35

Slide 35 text

. ├── app ├── config └── engines └── engineX ├── app │ ├── controllers │ ├── helpers │ ├── models │ └── views ├── config │ └── routes.rb ├── Gemfile └── engine_x.gemspec

Slide 36

Slide 36 text

WHAT GOES INSIDE AN ENGINE? CODE TESTS DUMMY APP FOR TESTS (AUTOMATED AND MANUAL) DATA MIGRATIONS ROUTES

Slide 37

Slide 37 text

1 module EngineX 2 class Engine < ::Rails::Engine 3 isolate_namespace EngineX 4 end 5 end ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NORMAL lib/engine_x/engine.rb

Slide 38

Slide 38 text

1 module EngineX 2 class Engine < ::Rails::Engine 3 isolate_namespace EngineX 4 end 5 end ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NORMAL lib/engine_x/engine.rb

Slide 39

Slide 39 text

1 module EngineX 2 class Engine < ::Rails::Engine 3 isolate_namespace EngineX 4 end 5 end ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NORMAL lib/engine_x/engine.rb

Slide 40

Slide 40 text

1 module EngineX 2 class Engine < ::Rails::Engine 3 isolate_namespace EngineX 4 end 5 end ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NORMAL lib/engine_x/engine.rb

Slide 41

Slide 41 text

AVOID CIRCULAR DEPENDENCIES

Slide 42

Slide 42 text

MAIN APP ENGINE

Slide 43

Slide 43 text

MAIN APP ENGINE

Slide 44

Slide 44 text

MICRO SERVICE? HOW A RAILS ENGINE CAN BECOME A

Slide 45

Slide 45 text

RD STATION DB EMAIL MARKETING LANDING PAGES

Slide 46

Slide 46 text

RD STATION DB EMAIL MARKETING LANDING PAGES email_marketing_* landing_pages_*

Slide 47

Slide 47 text

RD STATION EMAIL MARKETING DB EMAIL MARKETING LANDING PAGES email_marketing_* landing_pages_* LANDING PAGES DB

Slide 48

Slide 48 text

WHY SHOULD I USE RAILS ENGINES INSTEAD OF GOING ALL THE WAY TO MICRO SERVICES ?

Slide 49

Slide 49 text

WHY SHOULD I USE RAILS ENGINES INSTEAD OF GOING ALL THE WAY TO MICRO SERVICES ?

Slide 50

Slide 50 text

RAILS ENGINES MICRO SERVICES AS A WAY TO

Slide 51

Slide 51 text

Thanks LUCAS ALENCAR we’re hiring! bit.ly/2dofWZj [email protected] shipit.resultadosdigitais.com.br