Is there any other way to directly update it from 2.x to 5.x?
Note: I can develop it by scratch but my client not agree on that, they just asking for update in existing app not build from scratch in latest version of Ruby on Rails.
Good advise by Hasan. If the project isn’t that complex, though, you could just jump to the latest… .sometimes rewriting incrementally can be a painful waste of time just to rewrite again as you go from each increment to the next.
Latest Ruby should be the least of your problems… you will get huge code speedups from nothing more than upgrading Ruby. Most of the changes to Ruby since 1.8/1.9 to 2.6 have been to garbage collection speedups.
ActiveRecord changes and routes might be your most significant rewrites. Because we’re looking at Rails 6 beta as the current, you could also leapfrog to that? (depending on your scheduling and policies on using betas)
I'll second the idea to rebuild. One of the problems you'll run into is finding authoritative documentation for all the little things you'll need to do to go just from 2.0.2 to 2.3.1 (the last stable 2 branch, IIRC). Then rinse and repeat when you go to 3.0.x etc. That many jumps can easily swamp the amount of time it would take to just rebuild.
I just halted on an upgrade project due to time constraints. Rails V3 Ruby 1.9.3
It has so many abandoned Gems I had to stop at Rails 3.2.25 and Ruby 2.1
Thankfully it had good test coverage. That was a huge help.
Remember when we started whitelisted attributes in the model and then it was moved to the controller? There’s a lot of moving code around.
If you incrementally upgrade you can eventually use
rails app:update # Update configs and some other initially generated files (or use just update:configs or update:bin)
to help
I would also upgrade bundler to 1.13. You have better control over updating gems. Bundler: bundle update
My advice un upgrading is the same advice you get when you go white water raftering, and they talk about if you get stuck under the boat, “Pick a direction and go. Don’t turn around.”