Guard against calls to the database during db:create

Rails 5.2 has changed the way initializers are called during certain rake tasks including `db:create`. Initializers that were previously not loaded are now loaded (basically the whole app is loaded). This means any calls to #table_exists? that appear in the app will throw fatal errors as the database doesn't exist yet during that task, but those calls are made before `db:create` has even started, which means the database can't be created.

There are also a few other places in Spree code where #table_exists? is called, and they already call #connected? first to guard against this issue.
This commit is contained in:
Matt-Yorkley
2021-03-13 16:13:52 +00:00
committed by Andy Brett
parent 3070bb20ed
commit 7e9bf43ec8
2 changed files with 4 additions and 1 deletions

View File

@@ -79,7 +79,8 @@ module Openfoodnetwork
initializer 'ofn.spree_locale_settings', before: 'spree.promo.environment' do |app|
Spree::Config['checkout_zone'] = ENV['CHECKOUT_ZONE']
Spree::Config['currency'] = ENV['CURRENCY']
if Spree::Country.table_exists?
if ActiveRecord::Base.connected? && Spree::Country.table_exists?
country = Spree::Country.find_by(iso: ENV['DEFAULT_COUNTRY_CODE'])
Spree::Config['default_country_id'] = country.id if country.present?
else

View File

@@ -9,6 +9,8 @@ module Spree
# It also adds a validation on the input format.
# It accepts as arguments a variable number of attribute as symbols
def localize_number(*attributes)
return unless connected?
validate :validate_localizable_number
attributes.each do |attribute|