$30 off During Our Annual Pro Sale. View Details »

Anything new Rails 6?

Anything new Rails 6?

Rails 6 should have been released on April 30 at RailsConf 2019.
Instead of going over each and every new feature, we will take a more general look at the direction where Rails is heading and why do we need this new release that does not promise anything world-shaking.

Nikolay Sverchkov

June 02, 2019
Tweet

More Decks by Nikolay Sverchkov

Other Decks in Programming

Transcript

  1. NIKOLAY SVERCHKOV
    @ssnickolay
    ANYTHING
    NEW
    RAILS 6?

    View Slide

  2. View Slide

  3. #saintprubyconf @ssnickolay
    evilmartians.com

    View Slide

  4. #saintprubyconf @ssnickolay

    View Slide

  5. ANYTHING
    NEW
    RAILS 6?

    View Slide

  6. ANYTHING
    IMPORTANT
    RAILS 6?

    View Slide

  7. LET’S
    COMPARE!

    View Slide

  8. HISTORY OF
    RELEASES
    RAILS *.0: FEATURE-X

    View Slide

  9. #saintprubyconf @ssnickolay
    RAILS 2.0

    View Slide

  10. #saintprubyconf @ssnickolay
    RAILS 2.0
    Action Pack: Resources RESTful
    Action Pack: Multiview respond_to
    Action Pack: Security
    CRSF protection via
    protect_from_forgery
    Action Pack: Exception rescue_from

    View Slide

  11. #saintprubyconf @ssnickolay
    RAILS 2.0
    Active Record: Performance
    QUERY CACHE!

    View Slide

  12. MVC
    2010
    RAILS 3.0

    View Slide

  13. #saintprubyconf @ssnickolay
    RAILS 3.0
    config.gem !-> Bundler
    ARel
    Railties, Active Model, …

    View Slide

  14. #saintprubyconf @ssnickolay
    RAILS 3.0
    MERGE OF
    MERB AND RAILS

    View Slide

  15. #saintprubyconf @ssnickolay
    RAILS 2: LEGACY APP

    View Slide

  16. #saintprubyconf @ssnickolay
    *RAILS 3.0: TRUE
    ActiveRecord 3.0.5 is twice as slow as
    ActiveRecord 2.3.2. In a simple benchmark
    within a clean rails framework it is
    1.43 times slower.

    View Slide

  17. #saintprubyconf @ssnickolay
    *RAILS 3.0: TRUE

    View Slide

  18. #saintprubyconf @ssnickolay
    RAILS 4.0: MATURE

    View Slide

  19. #saintprubyconf @ssnickolay
    RAILS 5.0: NOT ONLY HTML

    View Slide

  20. #saintprubyconf @ssnickolay
    WHY WE SHOULD
    UPDATE OUR
    PROJECT?
    RAILS 4.* !=> RAILS 5.0

    View Slide

  21. #saintprubyconf @ssnickolay
    RAILS 6.0
    ❓❓

    View Slide

  22. #saintprubyconf @ssnickolay
    RAILS 6.0
    Parallel testing
    Multi DB
    Action Text
    Action Mailbox

    View Slide

  23. #saintprubyconf @ssnickolay
    RAILS 6.0
    gem ‘parallel_tests’
    Parallel testing
    Multi DB
    Action Text
    Action Mailbox
    ⭐ 2,567

    View Slide

  24. #saintprubyconf @ssnickolay
    RAILS 6.0
    gem ‘parallel_tests’
    gem ‘octopus’
    Parallel testing
    Multi DB
    Action Text
    Action Mailbox
    ⭐ 2,349

    View Slide

  25. #saintprubyconf @ssnickolay
    RAILS 6.0
    gem ‘parallel_tests’
    gem ‘octopus’
    WYSIWYG
    Parallel testing
    Multi DB
    Action Text
    Action Mailbox

    View Slide

  26. #saintprubyconf @ssnickolay
    RAILS 6.0
    gem ‘parallel_tests’
    gem ‘octopus’
    WYSIWYG

    Parallel testing
    Multi DB
    Action Text
    Action Mailbox

    View Slide

  27. #saintprubyconf @ssnickolay
    RAILS 6.0
    gem ‘parallel_tests’
    gem ‘octopus’
    -- skip-action-text
    - - skip-action-mailbox
    Parallel testing
    Multi DB
    Action Text
    Action Mailbox

    View Slide

  28. RAILS 6.0: WEBPACKER

    View Slide

  29. #saintprubyconf @ssnickolay
    RAILS 6.0:
    CONTINUE USING SPROCKETS
    (╯°□°)╯︵ ┻━┻

    View Slide

  30. ONE
    SKIP
    TO RULE
    THEM ALL

    View Slide

  31. #saintprubyconf @ssnickolay
    $ rails new -- skip-rails

    View Slide

  32. #saintprubyconf @ssnickolay
    $ rails new -- skip-rails
    Action Mailbox

    View Slide

  33. #saintprubyconf @ssnickolay
    $ rails new -- skip-rails
    Action Mailbox
    Action Text

    View Slide

  34. #saintprubyconf @ssnickolay
    $ rails new -- skip-rails
    Action Mailbox
    Action Text
    Sprockets

    View Slide

  35. #saintprubyconf @ssnickolay
    $ rails new -- skip-rails
    Action Mailbox
    Action Text
    Sprockets
    Turbolinks

    View Slide

  36. #saintprubyconf @ssnickolay
    ANYTHING
    NEW
    RAILS 6?

    View Slide

  37. #saintprubyconf @ssnickolay
    NO
    ANYTHING
    NEW
    RAILS 6?

    View Slide

  38. @ssnickolay
    Nikolay Sverchkov
    @ssnickolay
    THANK YOU!
    @evilmartians
    http://evl.ms/blog
    http://evl.ms/telegram

    View Slide

  39. Rails 6 sucks

    View Slide

  40. Rails 6 sucks
    who the hell does
    he think he is?

    View Slide

  41. View Slide

  42. Second Chance
    ANYTHING
    NEW
    RAILS 6?

    View Slide

  43. #saintprubyconf @ssnickolay
    RAILS 6.0
    MULTIPLE
    DATABASE
    SUPPORT

    View Slide

  44. #saintprubyconf @ssnickolay
    gem ‘octopus’

    View Slide

  45. #saintprubyconf @ssnickolay
    gem ‘octopus’
    FOCUSED ON

    View Slide

  46. #saintprubyconf @ssnickolay
    RAILS 6.0: MULTI DB
    MULTI DB =
    DB SHARDING =
    +
    + +
    VERTICAL OR HORIZONTAL
    PARTITIONING / REPLICATION

    View Slide

  47. #saintprubyconf @ssnickolay
    RAILS 6.0: MULTI DB
    RAILS DID NOT HAVE
    ADEQUATE* MULTI DB
    SUPPORT
    *https://github.com/ankane/multiverse

    View Slide

  48. #saintprubyconf @ssnickolay
    RAILS 6.0: MULTI DB
    MULTI DB !!=
    DATABASE SHARDING

    View Slide

  49. #saintprubyconf @ssnickolay
    RAILS 6.0: MULTI DB
    MULTI DB !!=
    DATABASE SHARDING
    ?

    View Slide

  50. #saintprubyconf @ssnickolay
    RAILS 6.0: MULTI DB
    MULTI DB !!=
    DATABASE SHARDING

    View Slide

  51. #saintprubyconf @ssnickolay
    AT LEAST 12 HUGE PRS
    FROM @EILEENCODES
    RAILS 6.0: MULTI DB

    View Slide

  52. #saintprubyconf @ssnickolay
    RAILS 6.0: !||TESTING
    PARALLEL
    UNIVERSAL
    TESTING

    View Slide

  53. #saintprubyconf @ssnickolay
    RAILS 6.0: !||TESTING

    View Slide

  54. #saintprubyconf @ssnickolay
    $ rspec
    N PROCESSES
    HOW ‘parallel_tests’ WORKS

    View Slide

  55. #saintprubyconf @ssnickolay
    HOW ‘parallel_tests’ WORKS
    $ rspec
    $ rspec spec/group1
    $ rspec spec/group3
    N PROCESSES
    $ rspec spec/group2

    View Slide

  56. #saintprubyconf @ssnickolay
    HOW ‘parallel_tests’ WORKS
    $ rspec
    $ rspec spec/group1
    $ rspec spec/group3
    THE
    FINAL
    OUTPUT
    N PROCESSES
    $ rspec spec/group2

    View Slide

  57. #saintprubyconf @ssnickolay
    HOW ‘parallel_tests’ WORKS
    rspec
    OUTPUT
    parallel_tests
    rspec
    rspec

    View Slide

  58. #saintprubyconf @ssnickolay
    HOW ‘Rails 6 ||’ WORKS
    OUTPUT
    Rails6
    QUEUE
    TESTS
    EXECUTOR

    View Slide

  59. #saintprubyconf @ssnickolay
    RAILS 6.0: !||TESTING
    PROCESSES
    OR
    THREADS?

    View Slide

  60. #saintprubyconf @ssnickolay
    RAILS 6.0: !||TESTING
    BOTH!

    View Slide

  61. BOTH!
    # default (as Github uses)
    parallelize(workers: 2, with: :processes)
    # or
    parallelize(workers: 2, with: :threads)
    RAILS 6.0: !||TESTING

    View Slide

  62. #saintprubyconf @ssnickolay
    RAILS 6.0: !||TESTING
    *ONE SMALL PROBLEM

    View Slide

  63. WHEN YOU
    RELEASE
    THE NEW
    FEATURE

    View Slide

  64. #saintprubyconf @ssnickolay
    gem ‘parallel_tests’ contributors

    View Slide

  65. gem ‘rails’ contributors

    View Slide

  66. #saintprubyconf @ssnickolay
    RAILS 6.0: !||TESTING
    FAST TESTS
    OUT OF THE

    View Slide

  67. USE BETTER SOLUTION
    FOR SPEEDING UP TESTS
    TEST-PROF
    WE ARE WATCHING YOU
    github.com
    /palkan/test-prof

    View Slide

  68. RAILS 6.0: ACTION MAILBOX

    View Slide

  69. RAILS 6.0: ACTION TEXT

    View Slide

  70. RAILS 6.0:
    ACTION [TEXT && MAILBOX]
    OUT OF THE

    View Slide

  71. THE SMALL
    BUT
    SIGNIFICANT

    View Slide

  72. RAILS 6.0: ACTION CABLE TESTING
    *ALSO IN
    RSPEC 4

    View Slide

  73. #saintprubyconf @ssnickolay
    RAILS 6.0: BULK INSERTS
    # Insert multiple records, performing an upsert
    # when records have duplicate ISBNs
    Book.upsert_all([
    { title: 'Rework', author: 'David', isbn: '1' },
    { title: 'Eloquent Ruby', author: 'Russ', isbn: '1' }
    ],
    unique_by: { columns: %w[ isbn ] })
    *gem ‘activerecord-import`

    View Slide

  74. #saintprubyconf @ssnickolay
    RAILS 6.0:
    MULTI DB && BULK INSERT &&
    PARALLEL TESTING
    OUT OF THE

    View Slide

  75. #saintprubyconf @ssnickolay
    RAILS 5.2 !-> RAILS 6.1
    !->
    … … !-> carrierwave
    ‘active_storage’

    View Slide

  76. BUT ON
    THE OTHER
    HAND…

    View Slide

  77. #saintprubyconf @ssnickolay
    RAILS != RUBY
    ☠ ‘octopus’
    ☠ ‘multiverse’
    ☠ ‘parallel_tests’
    ☠ ‘activerecord-import’

    View Slide

  78. RAILS 6.0: B-SIDES AND RARITIES
    evilmartians.com/chronicles

    View Slide

  79. #saintprubyconf @ssnickolay
    RAILS 6.0: OTHER
    https://bogdanvlviv.com/posts/ruby/rails/what-is-new-in-rails-6_0.html#other-links

    View Slide

  80. @bogdanvlviv
    COMMUNITY
    WE SHOULD BE GRATEFUL FOR THE WORK THEY DO
    A HUGE JOB

    View Slide

  81. @bogdanvlviv
    COMMUNITY
    WE SHOULD BE GRATEFUL FOR THE WORK THEY DO

    View Slide

  82. #saintprubyconf @ssnickolay
    expect(Rails6).to be_revolutionary
    RSpec!::Expectations!::ExpectationNotMetError:
    expected: revolutionary value
    got: evolutionary
    RAILS 6.0: EXPECTATIONS

    View Slide

  83. #saintprubyconf @ssnickolay
    FRESH BLOOD
    LIKE…
    RAILS 7.0?: REVOLUTION

    View Slide

  84. #saintprubyconf @ssnickolay
    RAILS 7.0?: REVOLUTION

    View Slide

  85. #saintprubyconf @ssnickolay
    RAILS 7.0?: REVOLUTION
    VIEWS
    ECTO
    CONTEXTS

    View Slide

  86. #saintprubyconf @ssnickolay
    RAILS 7.0?: REVOLUTION
    VIEWS
    ECTO
    CONTEXTS

    View Slide

  87. I am thinking
    about the
    Rails future
    will their community accept

    View Slide

  88. I am thinking
    about the
    Rails future
    Have you heard
    about Hanami?

    View Slide

  89. #saintprubyconf @ssnickolay
    RAILS 3.0
    MERGE OF
    MERB AND RAILS

    View Slide

  90. #saintprubyconf @ssnickolay
    RAILS 7.0 ???
    MERGE OF
    HANAMI AND RAILS

    View Slide

  91. #saintprubyconf @ssnickolay
    RAILS 7.0 ???
    MERGE OF
    HANAMI AND RAILS

    View Slide

  92. #saintprubyconf @ssnickolay
    I ♥ RAILS

    View Slide

  93. #saintprubyconf @ssnickolay
    I RAILS
    DEVELOPERS*

    View Slide

  94. #saintprubyconf @ssnickolay
    I RAILS
    DEVELOPERS*

    View Slide

  95. #saintprubyconf @ssnickolay
    OSS PROJECT’S COMMUNITY
    I WANT FEATURE X
    DON'T TOUCH ANYTHING
    CAN I USE IT
    ON WINDOWS?
    YOU ARE DEVELOPING
    TOO SLOWLY. I LEAVE!
    AGAIN BREAKING CHANGES.
    GO TO HELL!
    YOUR DOCS
    IS OUT OF DATE.
    DOES NOT WORK
    WITH RUBY 1.9.3

    View Slide

  96. #saintprubyconf @ssnickolay
    OSS PROJECT’S COMMUNITY
    I WANT FEATURE X
    YOU ARE DEVELOPING
    TOO SLOWLY. I LEAVE!
    AGAIN BREAKING CHANGES.
    GO TO HELL!
    YOUR DOCS
    IS OUT OF DATE.
    DOES NOT WORK
    WITH RUBY 1.9.3
    WE MISS YOU
    NICK
    CAN I USE IT
    ON WINDOWS?

    View Slide

  97. #saintprubyconf @ssnickolay
    OSS PROJECT’S COMMUNITY
    I WANT FEATURE X
    DON'T TOUCH ANYTHING
    YOU ARE DEVELOPING
    TOO SLOWLY. I LEAVE!
    AGAIN BREAKING CHANGES.
    GO TO HELL!
    YOUR DOCS
    IS OUT OF DATE.
    DOES NOT WORK
    WITH RUBY 1.9.3
    DUKE NUKEM
    CAN I USE IT
    ON WINDOWS?

    View Slide

  98. #saintprubyconf @ssnickolay
    DHH IS
    COOL

    View Slide

  99. #saintprubyconf @ssnickolay
    https://rubyonrails.org/doctrine/

    View Slide

  100. #saintprubyconf @ssnickolay
    QUIZ*

    View Slide

  101. DHH HAS NEVER BEEN IN RUSSIA

    View Slide

  102. #saintprubyconf @ssnickolay
    ANYTHING
    NEW
    RAILS 6?

    View Slide

  103. #saintprubyconf @ssnickolay
    ANYTHING
    NEW
    RAILS 6?
    NO

    View Slide

  104. #saintprubyconf @ssnickolay
    ANYTHING
    NEW
    RAILS 6?
    BUT

    View Slide

  105. #saintprubyconf @ssnickolay
    ANYTHING
    NEW
    RAILS 6?
    YES

    View Slide

  106. #saintprubyconf @ssnickolay
    vs

    View Slide

  107. #saintprubyconf @ssnickolay
    vs
    JUST CHOOSE WHICH SIDE YOU ARE ON

    View Slide

  108. @ssnickolay
    Nikolay Sverchkov
    @ssnickolay
    THANK YOU!
    @evilmartians
    http://evl.ms/blog
    http://evl.ms/telegram

    View Slide