Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ember with Rails: From Development to Deployment

Ember with Rails: From Development to Deployment

This talk covers the options for structuring concurrent Rails and Ember development, strategies for creating backend APIs that work well with Ember apps, and some innovative ideas around deploying your Ember and Rails apps into production.

Luke Melia

April 24, 2014

More Decks by Luke Melia

Other Decks in Technology


  1. Overview of this talk ★ Walkthrough an Ember + Rails

    App ★ Compare and Contrast ★ Development Tools ★ API ★ Deployment Approaches ★ Common Questions 3
  2. 6 Server Browser The Roles of Ember & Rails RESTful

    API endpoints (JSON) User interface & user interactions
  3. 7 Differences in Development Mindsets Request / response-based Long-lived state

    Lifetime of state measured in milliseconds Lifetime of state measured in minutes
  4. 8 Differences in Development Mindsets MVC with a router MVC

    with a router Sounds the same,
 but they are not.
 Do not plan on
 applying your
 Rails MVC
 vocabulary to
 Ember. ≠
  5. 9 Data Flow in Rails Browser Controller View (Template) Router

    Model Controller updates / queries models Sends HTML to Browser for to use to create DOM Sends requests via HTTP Generates HTML
  6. 10 Router Controller Controller View View Template Model Model Model

    Model Data flows down from models via bindings Events flow up from view layer to the router Router updates models & controllers based on events Data Flow in Ember
  7. 11 Ember Takes Inspiration From Rails ★ Convention over configuration

    ★ “Look at all the code I’m not writing!” ★ Internal DSLs for expressiveness ★ An engaged, vibrant community
  8. 12 Ember Takes Inspiration From Ruby ★ A focus on

    developer happiness ★ Object model: classical inheritance,
 mix-ins, class reopening
  9. Development Tools: Asset Pipeline 16 ★ Manage Javascript files yourself

    ★ Embed Handlebars templates in HTML and let Ember parse them at runtime
  10. Development Tools: Ember Rails 17 ★ Official interop supported by

    Ember Core ★ Generators ★ Template pre-compilation
  11. Development Tools: Ember AppKit Rails 18 ★ Based on ember-appkit,

    from my colleague Stefan Penner, which uses ES6 modules and a custom resolver ★ Used by Tilde & Dockyard ★ Future uncertain
  12. Development Tools: Separate From Rails 19 ★ Separate repo for

    your Ember app from your Rails app. Proxy in development. ★ Use any build tools, including grunt, gulp, brunch, or broccoli. ★ ember-cli is likely to be the future, still a work-in-progress
  13. Development Tools: Separate From Rails (cont.) 20 ★ Many JS

    build tools have option to proxy. Set it up to send /api traffic to Rails. ★ Or, run nginx locally and set up proxy rules accordingly.
  14. Development Tools: Tips 21 ★ Development vs. Production builds of

    Ember ★ Ember Inspector extension for Chrome & Firefox ★ Learn the Chrome Dev Tools. Better.
  15. Analogy to Traditional Rails Data Flow ★ In traditional Rails

    apps, controllers make instance variables available to be rendered using ERB ★ In a Ember+Rails app, controllers instead serialize these “instance variables” into JSON and make it available to Ember to render 23
  16. Options for API rendering ★ ERB ★ JBuilder ★ RABL

    ★ Active Model Serializers: Recommended 29
  17. CORS ★ It will be much easier to work with

    your API if your Ember app is served off the same domain as your Rails app is ★ If you must cross domains, check out the rack- cors gem. 30 https://github.com/cyu/rack-cors
  18. Two Options for Deployment ★ Deploy with your Rails app

    ★ Simple, but slow ! ★ Deploy independently ★ Fast, but more complex 32
  19. 33 Simple, but Ember apps changes are as slow to

    deploy as Rails app changes Rails server Dev or CI API requests dynamic Rails pages HTML for JS App JS for JS App CSS, Images for JS App AWS Cloudfront Deploy Rails
 app code, HTML,
 JS, CSS, images
  20. 34 More complex, but fast to deploy Static assets server

    (AWS S3) Rails server Dev or CI Deploy
 JS, CSS, images (additive) API requests dynamic Rails pages HTML for JS App JS for JS App CSS, Images for JS App Deploy HTML AWS Cloudfront Deploy Rails
 app code https://speakerdeck.com/lukemelia/lightning-fast-deployment-of-your-rails-backed-javascript-app
  21. “If I have MVC on the server and MVC on

    the client, am I doing double the work?” 36
  22. “If I have MVC on the server and MVC on

    the client, am I doing double the work?” (cont.) 37 ★ As Andre Malan said, “Your front end is not your back end” ★ Your Rails and Ember apps have separate responsibilities. Duplicated work on client and server is unusual.
  23. “What is the difference between a Rails controller and an

    Ember controller?” 38 ★ A Rails controller is responsible for doing some queries or work and initiating the rendering of JSON or HTML ★ An Ember controller is more akin to a “view model” or “presenter” in Rails land. It is responsible for presenting bindable data to templates for rendering by proxying models and maintaining non-model state and computed properties.
  24. “Should I match my Ember routes to my Rails routes?”

    39 ★ No. ★ Rails routes are typically based on REST principles. ★ Ember routes map to the URLs a users sees as they move through the app and are nested to match the nested structure of the UI.
  25. “How do I implement authentication with Ember?” 40 ★ Simplest:

    Separate log-in page. Standard Rails cookie-based auth. (Must be on same domain.) ★ More complicated: Token-based authentication. Login with username / password, receive bearer token. Send bearer token in Authorization header with all API requests.
  26. “How do I implement authentication with Ember?” (continued) 41 ★

    Most Ember apps have a UserController or MeController to allow routes and other controllers access to information about the current user. https://github.com/simplabs/ember-simple-auth
  27. “How do I implement authentication with Ember?” (continued) 42 ★

    Tips ★ Consider ember-simple-auth, plus ember- simple-auth-devise. ★ Use HTTPS. https://github.com/simplabs/ember-simple-auth
  28. Stefan Penner, Kris Selden, Ray Cohen & me 43 Yapp

    Labs ! Ember.js Consulting & Training