4.4 to 4.5
This guide covers upgrading a 4.4 Spree application to Spree 4.5.
If you're on an older version than 4.4 please follow previous upgrade guides and perform those upgrades incrementally, eg.
This is the safest and recommended method.
Rails 6.0 is no longer supported - if you haven’t already, you’ll need to upgrade to Rails 6.1 or 7.0. The effort to upgrade to Rails 6.1 is relatively low, but brings a lot of improvements around ActiveStorage and handling of CDNs. See the Rails docs for upgrading from 6.0 to 6.1, and for upgrading from 6.1 to 7.0.
If using Rails 7, you will need to install libvips on your cloud environment, as Rails 7 uses vips as its default variant processor. You can still use imagemagick, but you’ll need to manually set it in your Rails config.
If you're upgrading your app to Rails 7, you'll need to make a slight update to your spree config initializer. In
config/initializers/spree.rb
, wrap the Spree.config
block in a Rails.application.config.after_initialize
block, like so:Rails.application.config.after_initialize do
Spree.config do |config|
# config settings initialized here
end
end
If you don't perform this update to the code, you may expect to get the following error:
/lib/spree/core/preferences/store.rb:96:in `should_persist?':
uninitialized constant Spree::Preference (NameError)
Just like with Spree::Config, you may need to update other intializers in your application, that use autoloadable constants.
For example, if you use
spree_auth_devise
, you'll need to update config/initializers/devise.rb
and wrap the configuration in Rails.application.config.after_initialize
block:Rails.application.config.after_initialize do
if defined?(Spree::Auth)
Spree::Auth::Config.signout_after_password_change = false
end
end
gem 'spree', '>= 4.5.0'
Update all other spree gems used in your application to 4.5.0 or version compatible with 4.5:
gem 'spree_sample', '~> 4.5.0'
gem 'spree_emails', '~> 4.5.0'
gem 'spree_frontend', '>= 4.5.0'
gem 'spree_backend', '>= 4.5.0'
gem 'spree_gateway', '~> 3.10'
gem 'spree_auth_devise', '>= 4.5.0'
gem 'spree_i18n', '~> 5.1'
If your application depends on the Spree v1 API, you'll have to include it as a gem, as it has been extracted from the spree gem:
gem 'spree_api_v1'
bundle update
bin/rake railties:install:migrations
bin/rails db:migrate
If using Spree Frontend, run the following additional commands to get everything set up correctly with the updated gems:
bin/rails javascript:install:esbuild
bin/rails turbo:install
bin/rails g spree:frontend:install
yarn build
And that's a wrap!
🎉
For information about changes contained within this release, please read the Spree 4.5.0 Release Notes.
If you have any questions, issues or suggestions feel free to reach out through Spree slack channels.
Last modified 4mo ago