openfoodfoundation / ofn-install

Ansible scripts for provisioning and deploying Open Food Network
54 stars 112 forks source link

Move precompile task before migration task #892

Closed Matt-Yorkley closed 1 year ago

Matt-Yorkley commented 1 year ago

Description

Closes https://github.com/openfoodfoundation/ofn-install/issues/891

This change minimises the amount of time between the database migration and switching the old code for the new code, which should minimise errors during deployment.

Matt-Yorkley commented 1 year ago

Okay, I've done a bit of testing and as predicted; it works fine on regular deployments to existing servers but there are some issues when deploying to a fresh server for the first time, and this kicks in during the precompile step:

INFO -- : Writing /home/openfoodnetwork/apps/openfoodnetwork/releases-old/2023-08-15-130817/public/assets/admin_minimal-40f864c398f7f6917c612aa6dc3810c3fc7c89a41420586ecd4ea1eb9487ef13.js
I, [2023-08-15T13:09:16.845500 #75866]  INFO -- : Writing /home/openfoodnetwork/apps/openfoodnetwork/releases-old/2023-08-15-130817/public/assets/admin_minimal-40f864c398f7f6917c612aa6dc3810c3fc7c89a41420586ecd4ea1eb9487ef13.js.gz
I, [2023-08-15T13:09:18.713173 #75866]  INFO -- : Writing /home/openfoodnetwork/apps/openfoodnetwork/releases-old/2023-08-15-130817/public/assets/web/all-1da1cc6fe6a50c600a4552a2cc1a45297623e3d517b0e95219ed51cd7f798342.js
I, [2023-08-15T13:09:18.713264 #75866]  INFO -- : Writing /home/openfoodnetwork/apps/openfoodnetwork/releases-old/2023-08-15-130817/public/assets/web/all-1da1cc6fe6a50c600a4552a2cc1a45297623e3d517b0e95219ed51cd7f798342.js.gz
W, [2023-08-15T13:09:20.114670 #75866]  WARN -- : Removed sourceMappingURL comment for missing asset 'angular-file-upload.js.map' from /home/openfoodnetwork/.gem/ruby/3.1.0/gems/angularjs-file-upload-rails-2.4.1/app/assets/javascripts/angularjs-file-upload.js
rake aborted!
NoMethodError: undefined method `iso' for nil:NilClass

    country.iso
           ^^^^
/home/openfoodnetwork/apps/openfoodnetwork/releases-old/2023-08-15-130817/app/services/default_country.rb:9:in `code'
/home/openfoodnetwork/apps/openfoodnetwork/releases-old/2023-08-15-130817/app/assets/javascripts/darkswarm/services/gmaps_geo.js.erb.coffee:16:in `__tilt_7160'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/tilt-2.1.0/lib/tilt/template.rb:191:in `bind_call'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/tilt-2.1.0/lib/tilt/template.rb:191:in `evaluate'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/tilt-2.1.0/lib/tilt/template.rb:109:in `render'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/legacy_tilt_processor.rb:25:in `call'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:75:in `call_processor'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `reverse_each'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `call_processors'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:134:in `load_from_unloaded'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:60:in `block in load'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:317:in `fetch_asset_from_dependency_cache'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:44:in `load'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:20:in `block in initialize'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:47:in `load'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/bundle.rb:23:in `block in call'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/utils.rb:200:in `dfs'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/bundle.rb:24:in `call'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:75:in `call_processor'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `reverse_each'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `call_processors'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:134:in `load_from_unloaded'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:60:in `block in load'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:317:in `fetch_asset_from_dependency_cache'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:44:in `load'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:20:in `block in initialize'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:47:in `load'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/base.rb:66:in `find_asset'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/base.rb:73:in `find_all_linked_assets'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:134:in `block in find'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:133:in `each'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:133:in `find'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:186:in `compile'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-rails-3.4.2/lib/sprockets/rails/task.rb:67:in `block (3 levels) in define'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-3.7.2/lib/rake/sprocketstask.rb:147:in `with_logger'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/sprockets-rails-3.4.2/lib/sprockets/rails/task.rb:66:in `block (2 levels) in define'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/bugsnag-6.26.0/lib/bugsnag/integrations/rake.rb:20:in `execute'
/home/openfoodnetwork/.gem/ruby/3.1.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/home/openfoodnetwork/.rbenv/versions/3.1.4/bin/bundle:25:in `load'
/home/openfoodnetwork/.rbenv/versions/3.1.4/bin/bundle:25:in `<main>'

So we can see from the backtrace that precompiling runs into some legacy assets that use ERB, which call a service, which calls the database and expects there to be some data present (default country) but the data isn't there yet on the first deployment, so it throws a fatal error.

Hmmmm okay well we can probably fix this...

Matt-Yorkley commented 1 year ago

Alright, I've added a little fix for first deployments and it seems to be working as intended :tada: