This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the architecture category.
Last Updated: 2024-11-21
I had the following intitializer for geocoder
:
require_relative './redis'
Geocoder.configure(
cache: Redis.current, # cache object (must respond to #[], #[]=, and #keys)
)
Unfortunately, the use of Redis as the cache DB was hard-coded here so my seeding environment - which did not and should not include redis - failed to boot.
The fix was to understand that the Rails.application.configure
block in the
environment-specific files (e.g. development.rb
or production.rb
or in this
weird case: seeds.rb
) runs BEFORE any files in the initializers folder,
therefore any cache store I configure there would be available elsewhere:
# env/seeds.rb
Rails.application.configure do
config.cache_store = :memory_store, { size: 64.megabytes }
end
This enables code that references the general cache store (rather than the specific redis one)
# initializers/geocoder.rb
Geocoder.configure(
cache: Rails.cache
)
The beauty here is that decisions as to dependencies trickle down in one direction: from the env file.
(If environmentally dependent configuration is needed in the ENV file, I should use a yaml file to store that info.)