Railties loading after Gem causes load order issue
jharbert opened this issue · comments
Bonsai Elasticsearch Rails is a simple gem that requires the environment variable ENV['BONSAI_URL']
to be set.
Though I'm listing bonsai-elasticsearch-rails
above figaro
in my Gemfile
, the application.yml
file is not parsed before Bonsai Elasticsearch Rails is loaded, and causes Bonsai Elasticsearch Rails to not find the environment variable.
I believe this is because Figaro.load
is kicked off in Railties here: https://github.com/laserlemon/figaro/blob/master/lib/figaro/rails/railtie.rb#L5, and that this takes place after the gems are loaded.
So even explicitly calling:
require 'figaro'
require 'bonsai-elasticsearch-rails'
in my application.rb
file does not allow Bonsai Elasticsearch Rails to use the environment variable loaded with Figaro.
Your assessment is totally correct. Currently, Figaro depends on some Rails constructs like Rails.env
and Rails.root
, which means that the before_configuration
Rails hook is as early as we can load Figaro. The alternative here would be to defer requiring bonsai-elasticsearch-rails
until after Figaro is loaded. For example:
# Gemfile
gem "figaro"
gem "bonsai-elasticsearch-rails", require: false
# config/application.rb
Bundler.require(*Rails.groups)
module FooBar
class Application < Rails::Application
require "bonsai-elasticsearch-rails"
end
end
Not ideal but I hope that helps!