laserlemon / figaro

Simple Rails app configuration
MIT License
3.76k stars 288 forks source link

Ensure that Figaro.adapter is set to Figaro::Rails::Application before the figaro Railtie is loaded #260

Closed hlascelles closed 3 weeks ago

hlascelles commented 7 years ago

Figaro should be able to be used in the initializer of a Rails engine. Unfortunately, when testing the engine using a tool like Combustion, we see that the Railtie to load figaro is added immediately after the definition of Figaro::Rails::Application.

This can (and sometimes does) mean that the before_configuration block of that Railtie is immediately executed. At this point, the Figaro.adapter is still nil, so it is lazily created as a Figaro::Application. The Railtie then calls Figaro.load on it, and it blows up as default_path throws a NotImplementedError.

The solution is to set the adapter to a Figaro::Rails::Application as soon as possible, and before the Railtie is created.

This PR makes that 2 line swap change, and adds Combustion to the specs. If the two lines of logic are not swapped, you can see how the initializing process fails.

joehorsnell commented 7 years ago

@hlascelles - your builds are failing because the Travis config picks up different Bundler gemfiles for different Ruby versions (in figaro/gemfiles) so you'll need to add combustion to each of those.

hlascelles commented 1 year ago

This change has been extracted and added (https://github.com/hlascelles/figjam/pull/7) to a fork and continuation of this repo, and a new gem called Figjam: https://github.com/hlascelles/figjam