uninitialized constant Licensee::InvalidLicense
I am hitting a code path in development where for some reason my license is invalid. This will go down into this case: https://gitlab.com/gitlab-org/gitlab/blob/c1b8cab3fb54c409022491ec1e88d8c6f21237bb/app/models/repository.rb#L642
Upon entering the rescue, the application will crash with:
uninitialized constant Licensee::InvalidLicense
This is reproducible in a Rails console:
[1] pry(main)> Licensee::InvalidLicense
NameError: uninitialized constant Licensee::InvalidLicense
I think the problem is that since this is a nested class, one must first reference the outer module somewhere for the auto-loader to load and parse the underlying file, otherwise, the inner constant does not yet exist.
We can "fix" this in the console as follows:
[11] pry(main)> Licensee::License
=> Licensee::License
[12] pry(main)> Licensee::InvalidLicense
=> Licensee::InvalidLicense
By referencing License
first, zeitwerk (presumably) will load the licensee/license.rb
file in which the error is defined, thus also defining InvalidLicense
as a side-effect.