3.7 to 4.0
This guide covers upgrading a 3.7 Spree application to Spree 4.0.
If you have any questions or suggestions feel free to reach out through Spree slack channels
If you're on an older version than 3.7 please follow previous upgrade guides and perform those upgrades incrementally, eg.
This is the safest and recommended method.
Update your Ruby version to 2.5.0 at least
Spree 4.0 requires Ruby 2.5.0 at least so you need to bump the ruby version in your project's Gemfile
and .ruby-version
files.
Migrate from Paperclip to ActiveStorage
In Spree 3.6 we deprecated Paperclip support in favor of ActiveStorage. Paperclip gem itself isn't maintained anymore and it is recommended to move to ActiveStorage as it is the default Rails storage engine since Rails 5.2 release.
In Spree 4.0 we've removed Paperclip support in favor of ActiveStorage.
Please remove also any occurrences of Rails.application.config.use_paperclip
and Configuration::Paperclip
from your codebase.
Please follow the official Paperclip to ActiveStorage migration guide.
Replace OrderContents with services in your codebase
OrderContents
was deprecated in Spree 3.7 and removed in 4.0. We've replaced it with service objects.
You need to replace any instances of OrderContents
usage with corresponding services in your codebase.
OrderContents#update_cart
OrderContents#update_cart
before:
after:
OrderContents#add
OrderContents#add
before:
after:
OrderContents#remove
OrderContents#remove
before:
after:
Replace add_store_credit_payments
with Checkout::AddStoreCredit
add_store_credit_payments
with Checkout::AddStoreCredit
Similar to OrderContents
method add_store_credit_payments
was replaced with Checkout::AddStoreCredit
service.
before:
after:
Replace remove_store_credit_payments
with Checkout::RemoveStoreCredit
remove_store_credit_payments
with Checkout::RemoveStoreCredit
Similar to OrderContents
method remove_store_credit_payments
was replaced with Checkout::RemeoveStoreCredit
service.
before:
after:
Remove spree_address_book
extension
spree_address_book
extensionIf you're using the Address Book extension you need to remove it as this feature was merged into core Spree.
Remove this line from
Gemfile
Remove this line from
vendor/assets/javascripts/spree/frontend/all.js
Remove this line from
vendor/assets/stylesheets/spree/frontend/all.css
Replace class_eval
with Module.prepend
(only for Rails 6)
class_eval
with Module.prepend
(only for Rails 6)Rails 6.0 ships with a new code autoloader called Zeitwerk which has some strict rules in terms of file naming and contents. If you used class_eval
to extend and modify Spree classes you will need to rewrite those with Module.prepend
. Eg.
Old decorator syntax - app/models/spree/order_decorator.rb
New decorator syntax - app/models/my_store/spree/order_decorator.rb
When migrating a class method to the new autoloader things are a little different because you will have to prepend to the Singleton class as shown in this example:
Please also consider other options for Logic Customization.
We recommend also reading through Ruby modules: Include vs Prepend vs Extend
Update Bootstrap 3 to 4 or stay at Bootstrap 3
Spree 4 uses Bootstrap 4 for both Storefront and Admin Panel. You have two options:
Stay at Bootstrap 3
As we know this is a big portion of work you can still use Bootstrap 3 for your Storefront.
Copy all remaining views by running
bundle exec spree:frontend:copy_views
Add
bootstrap-sass
gem to yourGemfile
Move to Bootstrap 4
Follow the official Bootstrap 3 to 4 migration guide
Update Gemfile
Run bundle update
bundle update
Install missing migrations
Run migrations
Read the release notes
For information about changes contained within this release, please read the 4.0.0 Release Notes.
More info
If you have any questions or suggestions feel free to reach out through Spree slack channels
Last updated