- Update rails in gemfile
- Upgrade rails packages
- Add sprockets to gemfile
- Run update rails task
- Verify framework defaults
- Verify depreciated methods
How to upgrade an exising application to Rails 7. Note that Rails 7 requires Ruby 2.7.0 or newer.
1. Update rails in gemfile
# old
gem "rails", "~> 6.1.4"
# new
gem "rails", "~> 7.0.0"
In the terminal run:
bundle update
2. Upgrade rails packages
In the package.json file, find all @rails packages and upgrade then one by one. For example:
yarn upgrade @rails/actioncable --latest
yarn upgrade @rails/activestorage --latest
yarn upgrade @rails/request.js --latest
3. Add sprockets to gemfile
When you are using the asset pipeline, assets related errors can pop up when running a rails command.
Example:
# - Don't know how to build task 'assets:precompile'
# - 'method_missing': undefined method `assets'
Add sprockets to the gem file as it's now an optional depedency.
gem "sprockets-rails"
bundle install
4. Run update rails task
bin/rails app:update
This will prompt you file by file to integrate the new rails 7 defaults.
Example:
Overwrite .../config/boot.rb? (enter "h" for help) [Ynaqdhm]
Note: press h
to see the menu options.
Go through every file to inspect the difference between the default set-up of rails 7 and your current configuration.
You can open the files in your editor to compare when selecting merge (m). If you run into the following error:
Please specify merge tool to 'THOR_MERGE' env
Run the app:update command again with your editor specified.
For example (vs code)
THOR_MERGE=code bin/rails app:update
After completing the set-up run rails db:migrate
to migrate the newly added active storage migration file.
❗️ If you have set-up other environments, non-default enviroments, like staging.rb make sure to update that file too.
5. Verify framework defaults
After completing the bin/rails app:update
from the step 4, Rails creates a new_framework_defaults_7.0.rb file in config/initializers
. This file helps you to make a big upgrade a little easier by flipping on the new default settings one-by-one in multiple deployments.
The application.rb file's setting load_defaults specifies which rails version's default settings to load. This means you can temporarily utilize the default configuration settings from Rails 6.1 while running Rails 7.
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 6.1
Then, gradually turn on each setting and verify your application is still working as intended. Once you've switched on every setting, you can remove the new_framework_defaults_7.0.rb and flip the load_defaults version in application.rb to 7.0.
How to turn on Rails 7 framework defaults (part 1)
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 7.0
6. Verify depreciated methods
Your application might use other depreciated features. Read through the Rails 6.1 to Rails 7 section to identify and fix any methods call or settings that are no longer supported.
Oldest comments (5)
I think upgrading gem is only the beginning (1%?). The fun starts with updating application code.
Installing the gem is the easy part indeed!
I think the 5th step isn't necessary when you upgrade a recently created app.
I mean, you can load_defaults of rails 7.0 without problem
Consider this stackoverflow solution before the 5th step if you have some errors like:
Hey @thomasvanholder , I followed the steps in the post and I noticed that the
package.json
has no changes compared to those newly created rails 7 app, why is it like that? (Beginner learning ruby on rails)