[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-settings":3,"blogpost-a-quick-guide-to-ruby-rails-version-upgrades":72},{"footer":4,"contact_form":6,"chat_widget":11,"accolades":19,"seo_social":63},{"iso_notice":5},"Wolfpack Digital is an ISO 9001:2015, ISO 27001:2013 and ISO 14001:2015 certified company - © _YEAR_ Wolfpack Digital. All rights reserved.",{"budgets":7},[8,9,10],"Under $50.000","Between $50.000 - 200.000","Over $200.000",{"consent":12},{"greeting":13,"title":14,"body":15,"accept_label":16,"decline_label":17,"declined_message":18},"Awoo! I'm Wolfpack Digital's AI assistant. Ask me anything about our services, process, or team, and if you want a project estimate, I can point you to our AI Estimator.","Data Privacy","\u003Cp>Hi there! We would love to talk with you. Under the EU General Data Protection Regulation, we need your approval for our use of personal information (e.g. your name and email address) you may provide as we communicate:\u003C\u002Fp>\n\u003Col>\n  \u003Cli>We'll store your personal information so that we can pick up the conversation if we talk later.\u003C\u002Fli>\n  \u003Cli>We may send you emails to follow up on our discussion here.\u003C\u002Fli>\n  \u003Cli>We may send you emails about our upcoming services and promotions.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Is this okay with you?\u003C\u002Fp>","Yes, I Accept","No, Not Now","No problem. Come back if you change your mind.",{"winnersOfList":20,"awardsList":29,"inHouseAppImages":46,"certificationsList":50},[21,25],{"alt":22,"href":23,"image":24},"European Awards","https:\u002F\u002Fwww.theeuropeanawards.eu\u002Fpremiado\u002Fwolfpack-digital-awarded-in-the-app-development-category","\u002Fimages\u002Fabout-us\u002Fwinners\u002Feuropean.svg",{"alt":26,"href":27,"image":28},"Webby Awards","https:\u002F\u002Fwinners.webbyawards.com\u002F2024\u002Fwebsites-and-mobile-sites\u002Fresponsible-technology\u002Fresponsible-ai\u002F275408\u002Fequality-ai-fair-and-unbiased-algorithms-to-eliminate-discrimination-in-machine-learning-models","\u002Fimages\u002Fabout-us\u002Fwinners\u002Fwebby.svg",[30,34,38,42],{"alt":31,"href":32,"image":33},"Clutch 1000 List Reveals Top-Rated Business Service Providers of 2023","https:\u002F\u002Fclutch.co\u002Fpress-releases\u002Fclutch-1000-fall-2023","\u002Fimages\u002Fabout-us\u002Fawards\u002Fclutch.svg",{"alt":35,"href":36,"image":37},"Clutch Recognizes the 1000 Best B2B Service Providers in its Exclusive 2019 Clutch 1000 List","https:\u002F\u002Fclutch.co\u002Fpress-releases\u002Frecognizes-1000-best-b2b-service-providers-its-exclusive-2019-1000-list","\u002Fimages\u002Fabout-us\u002Fawards\u002Fglobal.svg",{"alt":39,"href":40,"image":41},"Mobile App Daily Award","","\u002Fimages\u002Fabout-us\u002Fawards\u002Fmobile-app-daily.svg",{"alt":43,"href":44,"image":45},"Manifest Award","https:\u002F\u002Fthemanifest.com\u002Fro\u002Fweb-development\u002Fcompanies","\u002Fimages\u002Fabout-us\u002Fawards\u002Fmanifest.svg",[47],{"alt":48,"href":40,"image":49},"Wolfpack Labs","\u002Fimages\u002Fhomepage\u002Fawards\u002Flabs.svg",[51,55,59],{"alt":52,"href":53,"image":54},"ISO 27001 Certification","https:\u002F\u002Fwww.qscert.com\u002Fcs\u002Fissued-certificates\u002F?certID=_7690LD367","\u002Fimages\u002Fabout-us\u002Fcertifications\u002Fiso-27001.svg",{"alt":56,"href":57,"image":58},"ISO 9001 Certification","https:\u002F\u002Fwww.qscert.com\u002Fcs\u002Fissued-certificates\u002F?certID=_7690LBDB0","\u002Fimages\u002Fabout-us\u002Fcertifications\u002Fiso-9001.svg",{"alt":60,"href":61,"image":62},"ISO 14001 Certification","https:\u002F\u002Fwww.qscert.com\u002Fma\u002Fissued-certificates\u002F?certID=_7690LZSGS","\u002Fimages\u002Fabout-us\u002Fcertifications\u002Fiso-14001.svg",{"default_og_image_urls":64,"default_og_image_alt":68,"og_site_name":68,"og_locale":69,"twitter_site":70,"page_type_defaults":71},[65],{"style":66,"url":67},"og","\u002Fimages\u002Fsocial_share_preview.jpg","Wolfpack Digital","en_US","@DigitalWolfpack",{},["Reactive",73],{"title":74,"body":75,"slug":76,"featured_image_urls":77,"meta_tags":102,"reading_time":110,"title_size":111,"tag_list":112,"formatted_published_at":122,"short_description":123,"categories":124,"alt_text":126,"published_at":127,"content_updated_at":128,"formatted_content_updated_at":129,"key_takeaways":130,"faqs":134,"updated_at":147,"canonical_override":40,"no_index":148,"canonical_url":149,"publishers":150},"A Quick Guide to Ruby & Rails Version Upgrades","\u003Cp>The example below walks through a Rails 6 to 7 (Ruby 2.6 to 3) upgrade, but the same incremental, test-driven process applies to today's versions. The current stable release is Rails 8.1, which requires Ruby 3.2 or newer (Ruby 3.4 or newer recommended).\u003C\u002Fp>\u003Cp>We recently upgraded a project from Ruby 2.6.6 to 3.x and Rails 6.0.4.8 to 7.x. The task turned out to be far more demanding than we expected, with plenty of challenges — some better documented than others. So if you're going through something similar, this article covers all the main changes we had to deal with. 🗒️\u003C\u002Fp>\u003Cp>\u003Cstrong>Short disclaimer:\u003C\u002Fstrong> this doesn't cover the under-the-hood changes \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fblogposts\u002Fwhy-use-ruby-on-rails-for-web-app-development\" rel=\"noopener noreferrer\" target=\"_blank\">Ruby and Rails\u003C\u002Fa>\u003C\u002Fstrong> made in their upgrades. Those are widely documented, and we highly recommend these resources: \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fwww.fastruby.io\u002Fblog\u002Fruby\u002Fupgrades\u002Fupgrade-ruby-from-2.7-to-3.0.html\" rel=\"noopener noreferrer\" target=\"_blank\">upgrading Ruby\u003C\u002Fa>\u003C\u002Fstrong> and \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fguides.rubyonrails.org\u002Fupgrading_ruby_on_rails.html\" rel=\"noopener noreferrer\" target=\"_blank\">upgrading Rails\u003C\u002Fa>\u003C\u002Fstrong>. Those guides also list some implementation changes you'll need to make. That's our main goal here too — but we'll also cover a few unexpected situations they leave out. To check the latest supported Ruby versions and releases, see this \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fwww.ruby-lang.org\u002Fen\u002Fdownloads\u002Freleases\u002F\" rel=\"noopener noreferrer\" target=\"_blank\">resource\u003C\u002Fa>\u003C\u002Fstrong>.\u003C\u002Fp>\u003Cp> \u003C\u002Fp>\u003Ch2>Let's start with Ruby💎\u003C\u002Fh2>\u003Cp>We started with the \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Ftechnologies\u002Fruby-on-rails\" rel=\"noopener noreferrer\" target=\"_blank\">Ruby\u003C\u002Fa> \u003C\u002Fstrong>upgrade, and we strongly recommend you do the same. For one, Rails 7 requires Ruby 2.7.0 or newer, and we only had 2.6.6. On top of that, many gem updates depend on Ruby 3 compatibility — so most of the work lives in this upgrade.\u003C\u002Fp>\u003Cp>Let's get started! 🚀\u003C\u002Fp>\u003Cp>We use \u003Cem>rbenv\u003C\u002Fem>, so updating the version on our machine was easy. After installing Ruby 3.1.2 (in our case) and updating the project Gemfile, run \u003Cem>“bundle install”\u003C\u002Fem> and then run the tests. Unfortunately, \u003Cstrong>gem incompatibilities\u003C\u002Fstrong> show up right away.\u003C\u002Fp>\u003Cp>That's our first takeaway. If you've had some gem versions locked for more than a year, they're probably incompatible with Ruby 3. You'll likely know which dependencies need updating, but here are three specific examples:\u003C\u002Fp>\u003Col>\n\u003Cul>\u003Cli>\n\u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Frubygems.org\u002Fgems\u002Frspec-rails\" rel=\"noopener noreferrer\" target=\"_blank\">Rspec-rails\u003C\u002Fa>\u003C\u002Fstrong> - our testing gem of choice. It needed an upgrade to version 5+ on our project.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cul>\u003Cli>\n\u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Frubygems.org\u002Fgems\u002Ffaker\" rel=\"noopener noreferrer\" target=\"_blank\">Faker\u003C\u002Fa>\u003C\u002Fstrong> - we mostly use this for specs and factories. Upgrading it brought some changes: all methods now need keyword arguments (\u003Cem>Faker::Number.unique.number(digits: 2) \u003C\u002Fem>instead of\u003Cem> Faker::Number.unique.number(2)\u003C\u002Fem>).\u003C\u002Fli>\u003C\u002Ful>\n\u003Cul>\u003Cli>\n\u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Frubygems.org\u002Fgems\u002Fpsych\" rel=\"noopener noreferrer\" target=\"_blank\">Psych\u003C\u002Fa>\u003C\u002Fstrong> - a bizarre one. There's a very detailed explanation \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fbugs.ruby-lang.org\u002Fissues\u002F17866\" rel=\"noopener noreferrer\" target=\"_blank\">in this Ruby Psych bug report\u003C\u002Fa>\u003C\u002Fstrong>. In short: Ruby 3.0 ships Psych 3, while Ruby 3.1 ships Psych 4, which has a major breaking change. Our fix (at least for the Ruby upgrade) was to add \u003Cem>gem ‘psych’, ‘&lt; 4\u003C\u002Fem>’ to the Gemfile to force a Psych version under 4.x. That also meant changing the machine's default Psych from 4.x to 3.3.2 (\u003Cem>gem install --default -v3.3.2 psych\u003C\u002Fem>) and then following \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F54761120\u002Frails-how-to-change-bundler-default-version\u002F66843623#66843623\" rel=\"noopener noreferrer\" target=\"_blank\">this comment\u003C\u002Fa>\u003C\u002Fstrong> to remove the 4.0.4 version.\u003C\u002Fli>\u003C\u002Ful>\n\u003C\u002Fol>\u003Cp>Your Gemfile may have many other incompatible gems that you don't use or that sit at a different version. The three above needed the most work on our side and are also the most widely used.\u003C\u002Fp>\u003Cp>Once we cleared the gem incompatibilities, we had to apply the new Ruby 3 changes to the project. One of the main ones was how positional and keyword arguments now work (more detail \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fwww.ruby-lang.org\u002Fen\u002Fnews\u002F2019\u002F12\u002F12\u002Fseparation-of-positional-and-keyword-arguments-in-ruby-3-0\u002F\" rel=\"noopener noreferrer\" target=\"_blank\">in Ruby 3.0's keyword-arguments announcement\u003C\u002Fa>\u003C\u002Fstrong>).\u003C\u002Fp>\u003Cp>For example, we had \u003Cem>let(:params) { key1: ‘value1’, key2: ‘value2’ } \u003C\u002Fem>and\u003Cem> service_base_child.call(params)\u003C\u002Fem>. We had to change it to \u003Cem>service_base_child.call(**params)\u003C\u002Fem>.\u003C\u002Fp>\u003Cp>Finally, we could move to the easy task: updating the Docker and CircleCI images.\u003C\u002Fp>\u003Cp> \u003C\u002Fp>\u003Ch2>Upgrading Rails 🛤️\u003C\u002Fh2>\u003Cp>Our Rails version (and its dependencies) was 6.0.4.8. We'd bumped it a few times since the project started, for security fixes and small changes — but, like with Ruby, those updates were incremental and small. The good news: the Rails upgrade doesn't cause nearly as many incompatibilities, and most changes were syntax, config, or implementation rather than gem updates.\u003C\u002Fp>\u003Cp>Handily, the Ruby on Rails site has \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fguides.rubyonrails.org\u002Fupgrading_ruby_on_rails.html\" rel=\"noopener noreferrer\" target=\"_blank\">a great guide\u003C\u002Fa>\u003C\u002Fstrong> on upgrading to the current version. We won't repeat what's already there, but some of the smaller steps aren't as smooth as you'd hope. ⚠️\u003C\u002Fp>\u003Cp>The first step, also in the guide, is updating the Gemfile and the gems, then running \u003Cem>rails app:update\u003C\u002Fem>. This triggers changes across many existing project files. We suggest allowing inserts\u002Fupdates for all of them, then going through each git diff manually to check the changes make sense. Many are just single quotes becoming double quotes — but expect a few critical ones too. And watch out if the update strips specific settings, like your Action Mailer config.\u003C\u002Fp>\u003Cp>From the Rails upgrade, we had just five main takeaways to handle. There were smaller changes too, like other gem upgrades, but those are easy to catch and fix.\u003C\u002Fp>\u003Col>\n\u003Cul>\u003Cli>In \u003Cem>application.rb\u003C\u002Fem>, set \u003Cem>config.load_defaults \u003C\u002Fem>to 7.0. This loads the default configuration Rails ships for version 7+.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cul>\u003Cli>Move to the new \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fguides.rubyonrails.org\u002Factive_record_encryption.html\" rel=\"noopener noreferrer\" target=\"_blank\">Active Record encryption\u003C\u002Fa>\u003C\u002Fstrong> — meaning you swap anything using \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Frubygems.org\u002Fgems\u002Fattr_encrypted\" rel=\"noopener noreferrer\" target=\"_blank\">attr_encrypted\u003C\u002Fa>\u003C\u002Fstrong> for the new implementation. Luckily, we only used attr_encrypted for a few third-party API access tokens, so we didn't need to migrate database instances — we just deleted them and regenerated them. If you need to keep that data, there are extra steps to consider; this \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fpagertree.com\u002F2021\u002F04\u002F13\u002Frails-7-attr-encrypted-migration\u002F\" rel=\"noopener noreferrer\" target=\"_blank\">guide\u003C\u002Fa>\u003C\u002Fstrong> explains how. For us, it meant writing a migration to remove the \u003Cem>encrypted_access_token \u003C\u002Fem>and\u003Cem> encrypted_access_token_iv\u003C\u002Fem> columns (required by attr_encrypted) and add a new \u003Cem>access_token\u003C\u002Fem> string. Also, \u003Cem>attr_encrypted :access_token, key: :some_key\u003C\u002Fem> becomes \u003Cem>encrypts :access_token\u003C\u002Fem>. Next, run \u003Cem>rails db:encryption:init\u003C\u002Fem> to generate a set of keys for your credentials. We also found you need to add \u003Cem>config.active_record.encryption = Credentials[:active_record_encryption]\u003C\u002Fem> to each environment file so the app finds and uses these values.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cul>\u003Cli>Replace \u003Cem>errors[:base] &lt;&lt; 'foo'\u003C\u002Fem> with \u003Cem>errors.add(:base, 'foo')\u003C\u002Fem>.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cul>\u003Cli>If you use \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Frubygems.org\u002Fgems\u002Fbullet\" rel=\"noopener noreferrer\" target=\"_blank\">bullet\u003C\u002Fa>\u003C\u002Fstrong> like we do, upgrade it to the latest version and make sure no n+1 warnings appear. In our case, the new version caught about 10 cases it hadn't flagged as n+1 queries before. Double-checking those can shave seconds off your next query.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cul>\u003Cli>If you use CarrierWave with attachments, note that \u003Cem>attachment.file#filename\u003C\u002Fem> is deprecated — switch to \u003Cem>attachment.file#identifier\u003C\u002Fem>. Also refactor \u003Cem>Kernel#open\u003C\u002Fem> to \u003Cem>URI.open\u003C\u002Fem>, or better yet \u003Cem>URI.parse#open\u003C\u002Fem>.\u003C\u002Fli>\u003C\u002Ful>\n\u003C\u002Fol>\u003Cp> \u003C\u002Fp>\u003Ch2>Conclusions💡\u003C\u002Fh2>\u003Cp>This upgrade surfaced three key takeaways — and they're why we wrote this article:\u003C\u002Fp>\u003Col>\n\u003Cul>\u003Cli>\n\u003Cstrong>Write tests!\u003C\u002Fstrong> Strong test coverage made the job so much easier. Changing methods because of a deprecation, migrating to the new encryption system, upgrading a library? Just run the suite. If everything passes and coverage is good, you can be confident the change worked. Without it, things slip through because “there's nothing new here” — and a validation error still pops up.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cul>\u003Cli>\n\u003Cstrong>Take your time.\u003C\u002Fstrong> This took longer than we expected. You'll hit inconsistencies and incompatibilities that are specific to your project, its previous versions, and its dependencies. After an upgrade like this, test the API or app thoroughly so nothing slips by. In our case, the \u003Cem>Kernel#open\u003C\u002Fem> issue did slip through at first.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cul>\u003Cli>\n\u003Cstrong>Think about why you're upgrading.\u003C\u002Fstrong> As we said, it's a long task. The latest security fixes, bug fixes, and updates are worth having, but major version changes deserve thought. We should all upgrade ongoing projects at some point — just choose the timing carefully.\u003C\u002Fli>\u003C\u002Ful>\n\u003C\u002Fol>\u003Cp>Thanks for reading, and we hope this guide helps with your own upgrades. We write articles like \u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fblogposts\u002Fdesigning-working-with-a-ruby-on-rails-project-audit\" rel=\"noopener noreferrer\" target=\"_blank\">these\u003C\u002Fa> whenever we or our community hit unexpected \u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fblogposts\u002Fdeveloping-secure-web-apps-with-ruby-on-rails\" rel=\"noopener noreferrer\" target=\"_blank\">difficulties\u003C\u002Fa> with no \u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fblogposts\u002Fhow-to-build-your-mvp-in-2-4-weeks-the-ai-native-approach\" rel=\"noopener noreferrer\" target=\"_blank\">helpful resources\u003C\u002Fa> around. So if there's a \u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fservices#business-strategy-and-product-definition\" rel=\"noopener noreferrer\" target=\"_blank\">technical problem\u003C\u002Fa> you're battling, don't hesitate to \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fcontact\" rel=\"noopener noreferrer\" target=\"_blank\">shoot us a message\u003C\u002Fa>\u003C\u002Fstrong> — we'll do our best to help! 👐\u003C\u002Fp>\u003Ch2>About Wolfpack Digital🐺\u003C\u002Fh2>\u003Cp>With over 250 projects successfully delivered to our partners, we're a \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fservices\u002Fweb-development\" rel=\"noopener noreferrer\" target=\"_blank\">web\u003C\u002Fa>\u003C\u002Fstrong> and \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fservices\u002Fmobile-development\" rel=\"noopener noreferrer\" target=\"_blank\">mobile app development\u003C\u002Fa>\u003C\u002Fstrong> company. Our mission is to bring performance and beauty to the world through technology.\u003C\u002Fp>\u003Cp>We build projects start-to-end, with deep expertise in beauty app design and development, fintech app development, healthcare IT solutions, custom website development, cross-platform app development, and more.\u003C\u002Fp>\u003Cp>Have a project in mind? \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fcontact\" rel=\"noopener noreferrer\" target=\"_blank\">Get in touch, and let's talk\u003C\u002Fa>\u003C\u002Fstrong>!\u003C\u002Fp>\u003Cp>Ever wondered how to build mobile apps with Ruby on Rails? We wrote an \u003Cstrong style=\"color: rgb(250, 53, 123)\">\u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fblogposts\u002Fdeveloping-mobile-apps-with-ruby-myth-or-reality\" rel=\"noopener noreferrer\" target=\"_blank\">article on that too\u003C\u002Fa>\u003C\u002Fstrong> — give it a read!\u003C\u002Fp>","a-quick-guide-to-ruby-rails-version-upgrades",[78,81,84,87,90,93,96,99],{"style":79,"url":80},"640","https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fblogpost\u002F196\u002Ffeatured_image\u002F640\u002FBlogpost_Ruby%20on%20Rails_Landscape.webp",{"style":82,"url":83},"768","https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fblogpost\u002F196\u002Ffeatured_image\u002F768\u002FBlogpost_Ruby%20on%20Rails_Landscape.webp",{"style":85,"url":86},"1024","https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fblogpost\u002F196\u002Ffeatured_image\u002F1024\u002FBlogpost_Ruby%20on%20Rails_Landscape.webp",{"style":88,"url":89},"1366","https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fblogpost\u002F196\u002Ffeatured_image\u002F1366\u002FBlogpost_Ruby%20on%20Rails_Landscape.webp",{"style":91,"url":92},"1600","https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fblogpost\u002F196\u002Ffeatured_image\u002F1600\u002FBlogpost_Ruby%20on%20Rails_Landscape.webp",{"style":94,"url":95},"1920","https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fblogpost\u002F196\u002Ffeatured_image\u002F1920\u002FBlogpost_Ruby%20on%20Rails_Landscape.webp",{"style":97,"url":98},"thumb","https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fblogpost\u002F196\u002Ffeatured_image\u002Fthumb\u002FBlogpost_Ruby%20on%20Rails_Landscape.webp",{"style":100,"url":101},"original","https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fblogpost\u002F196\u002Ffeatured_image\u002Foriginal\u002FBlogpost_Ruby%20on%20Rails_Landscape.webp",{"title":103,"description":104,"keywords":105,"contact_form:title":106,"contact_form:cta":107,"og:site_name":68,"og:type":108,"og:locale":69,"twitter:card":109,"twitter:site":70,"twitter:creator":70,"og:title":74,"twitter:title":74},"How to Upgrade Ruby on Rails: A Practical Guide","How to upgrade Ruby on Rails without surprises: a real Rails 6-to-7 and Ruby 2.6-to-3 upgrade, the gem incompatibilities to expect, and how to do it safely.","ruby on rails, ruby on rails upgrade, rails 6 to 7 upgrade, ruby 3 upgrade, rails upgrade guide, ruby on rails version","contact us","send message","article","summary_large_image","5 min",32,[113,114,115,116,117,118,119,120,121],"Rails 6 upgrade","new rails version","rails upgrades","rails upgrade services","rails app","rails application","ruby on rails","upgrade ruby 2.7 to 3","upgrade rails","Jul 15, 2022","Upgrading a Ruby on Rails project sounds straightforward, but unexpected challenges can make it harder than you'd expect. Don't worry though, here's a guide!",[125],"web-development","Illustration of a Ruby gem rising on an upward arrow, representing Ruby on Rails version upgrades","2022-07-15T10:00:00.000Z","2026-06-26T11:57:32.728Z","Jun 26, 2026",[131,132,133],"Upgrade Ruby before Rails. Most of the work is making your gems compatible with Ruby 3, and each Rails version sets a minimum Ruby requirement.","Lean on a strong test suite. Run it after every gem bump, deprecation fix, and the Active Record encryption migration to catch regressions immediately.","Go incremental, one minor version at a time. The current stable release is Rails 8.1, which needs Ruby 3.2 or newer (Ruby 3.4 or newer recommended).",[135,138,141,144],{"answer":136,"question":137},"The current stable release is Rails 8.1. Rails 8 requires Ruby 3.2 or newer, with Ruby 3.4 or newer recommended for best performance. If you are on Rails 6 or 7, upgrade incrementally, one minor version at a time, up to 8.1. See our \u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Ftechnologies\u002Fruby-on-rails\">Ruby on Rails\u003C\u002Fa> work and \u003Ca href=\"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fservices\u002Fweb-development\">web development services\u003C\u002Fa>.","Which Ruby on Rails version should I upgrade to?",{"answer":139,"question":140},"Upgrade one minor version at a time, keep a strong test suite, update your gems first, run rails app:update, review config.load_defaults, and resolve deprecation warnings before moving to the next version. Read the official release notes for each step.","How do I upgrade Ruby on Rails safely?",{"answer":142,"question":143},"Rails 8 requires Ruby 3.2 or newer. Ruby 3.4 or a newer 3.x release is recommended for the best performance thanks to YJIT improvements.","What Ruby version do I need for Rails 8?",{"answer":145,"question":146},"Upgrading brings security patches, performance gains, new features, and gem compatibility, and it prevents a costly big-bang upgrade later. Staying close to the current release keeps your project secure and maintainable.","Why should you upgrade your Rails version?","2026-07-06T17:28:19.179Z",false,"https:\u002F\u002Fwww.wolfpack-digital.com\u002Fblogposts\u002Fa-quick-guide-to-ruby-rails-version-upgrades",[151],{"id":152,"author":153,"short_description":154,"role":155,"avatar_urls":156,"cover_urls":164,"linkedin_link":183,"instagram_link":40,"x_link":40,"meta_tags":184,"last_published_at":188,"same_as":189},14,"Victor Motogna","\u003Cp>Victor Motogna is the Head of Web Development at Wolfpack Digital, leading the web development team and driving innovation in scalable, secure web applications. With a Bachelor's in Computer Science and a Master's in High Performance Computing &amp; Big Data Analytics, he brings deep technical expertise and a forward-thinking approach to building enterprise-grade solutions.\u003C\u002Fp>\u003Cbr>\u003Cp>As both a technical leader and hands-on contributor, Victor works across the full technology stack including Ruby on Rails, Vue.js, Nuxt.js, JavaScript, and Python, with extensive experience in DevOps frameworks and cloud infrastructure (Azure, AWS, Kubernetes). His role extends beyond traditional web development—he plays a key part in architecting AI-powered features, training machine learning models, and ensuring AI integration delivers genuine business value rather than following trends.\u003C\u002Fp>\u003Cbr>\u003Cp>Victor's leadership philosophy centers on balancing technical excellence with practical delivery. He excels at translating complex technical concepts into clear business language, architecting solutions that strike the right balance between technical sophistication and MVP speed, and staying ahead of rapid technological change. His approach emphasizes building stable, secure end-to-end solutions while constantly seeking smarter, more efficient development processes.\u003C\u002Fp>\u003Cbr>\u003Cp>A frequent speaker at technology conferences across Europe, Victor shares insights on modern web development practices, AI integration strategies, cloud architecture, and building high-performing development teams. His writing draws on real-world experience delivering 250+ digital products and reflects his commitment to using technology to create meaningful solutions that improve people's lives.\u003C\u002Fp>\u003Cbr>\u003Cp>Through his blog contributions, Victor explores topics at the intersection of web development, AI, and entrepreneurship, focusing on practical implementation strategies, technology decision-making, and fostering knowledge exchange within development teams.\u003C\u002Fp>\u003Cbr>\u003Cp>\u003Cstrong>Areas of expertise:\u003C\u002Fstrong> Web application architecture, Ruby on Rails development, Vue.js\u002FNuxt.js, AI integration, machine learning model training, DevOps and cloud infrastructure, team leadership, full-stack development, technical strategy, scalable systems design.\u003C\u002Fp>","Head of Web Development",[157,159,162],{"style":97,"url":158},"https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Favatar\u002Fthumb\u002Fimage_processing20211021-4-tz7chx%20%281%29.webp",{"style":160,"url":161},"medium","https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Favatar\u002Fmedium\u002Fimage_processing20211021-4-tz7chx%20%281%29.webp",{"style":100,"url":163},"https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Favatar\u002Foriginal\u002Fimage_processing20211021-4-tz7chx%20%281%29.webp",[165,167,169,171,173,175,177,179,181],{"style":79,"url":166},"https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Fcover_image\u002F640\u002FVictor.webp",{"style":82,"url":168},"https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Fcover_image\u002F768\u002FVictor.webp",{"style":85,"url":170},"https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Fcover_image\u002F1024\u002FVictor.webp",{"style":88,"url":172},"https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Fcover_image\u002F1366\u002FVictor.webp",{"style":91,"url":174},"https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Fcover_image\u002F1600\u002FVictor.webp",{"style":94,"url":176},"https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Fcover_image\u002F1920\u002FVictor.webp",{"style":97,"url":178},"https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Fcover_image\u002Fthumb\u002FVictor.webp",{"style":160,"url":180},"https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Fcover_image\u002Fmedium\u002FVictor.webp",{"style":100,"url":182},"https:\u002F\u002Fcdn.wolfpack-digital.com\u002Fstore\u002Fpublisher\u002F14\u002Fcover_image\u002Foriginal\u002FVictor.webp","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fvictor-motogna\u002F",{"title":185,"description":186,"keywords":40,"contact_form:title":106,"contact_form:cta":107,"og:site_name":68,"og:type":187,"og:locale":69,"twitter:card":109,"twitter:site":70,"twitter:creator":70},"Victor - Head of Web Development | Wolfpack Digital Blog","Web development leader specializing in Ruby on Rails, Vue.js, and AI integration. Victor shares insights on scalable architecture, cloud infrastructure, and modern web development.","website","2025-09-26T09:15:00.000Z",[183]]