fxn / zeitwerk

Efficient and thread-safe code loader for Ruby
MIT License
1.97k stars 117 forks source link

Uninitialized constant with nested models Rails 6 upgrade #180

Closed michaelcarter closed 3 years ago

michaelcarter commented 3 years ago

The issue

I'm almost certain I'm doing something simple wrong here, but I've been stuck on this for a few days now without success after much searching and experimentation.

I'm upgrading a Rails project from Rails 5 to Rails 6.0.4.1 (Ruby 2.7.3), and trying to get various models and classes loading using zeitwerk 2.4.2.

Some of my nested classes within an app/models/api folder seemingly aren't discovered or aren't loaded by zeitwerk. For example:

models/user.rb                -> User (loads)
models/api/base.rb            -> Api::Base (does not load)
models/api/person.rb          -> Api::Person (does not load)
models/api/person/address.rb  -> Api::Person::Address (does not load)

Some observations

1 - My Api::Base class loads when defined within a explicit module like so:

module Api
  class Base
  end
end

But the more succinct class Api::Base does not...

2 - I've also noticed that if I delete the /models/api/person directory, I can get the Api::Person class to load using the same explicit module approach above.

3 - Lastly, when I call Api.constants, I can see both Base and Person in the result:

> Api.constants
=> [
 :Base,
 :Person]

...but calling const_get on either of them gives me the uninitialized constant error.

To test all this, I've been firing up a rails console and just trying to use the models like so:

rails c
Loading development environment (Rails 6.0.4.1)
> Api::Person
NameError: uninitialized constant Api::Person
from (pry):1:in `__pry__'

I feel like I should apologize in advance for what's likely to be a complete misunderstanding on my end. I keep coming back to the explicit namespaces section of the documentation and wondering why this isn't working.

Any assistance anyone could offer would be much appreciated.

fxn commented 3 years ago

I am sure we'll figure it out.

Would it be possible to throw Rails.autoloaders.log! in config/application.rb, execute bin/rails runner 1, and share the logs?

michaelcarter commented 3 years ago

@fxn - Thanks - logs below:

Zeitwerk@rails.main: autoload set for ReturningUsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/returning_users_controller.rb
Zeitwerk@rails.main: autoload set for IntroToMyriftController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/intro_to_myrift_controller.rb
Zeitwerk@rails.main: autoload set for DocumentsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/documents_controller.rb
Zeitwerk@rails.main: autoload set for ApplicationController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/application_controller.rb
Zeitwerk@rails.main: autoload set for Expense, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/expense
Zeitwerk@rails.main: autoload set for CommonLocationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/common_locations_controller.rb
Zeitwerk@rails.main: autoload set for ClaimWizardsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/claim_wizards_controller.rb
Zeitwerk@rails.main: autoload set for BankAccountsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/bank_accounts_controller.rb
Zeitwerk@rails.main: autoload set for IdleHelpPanelController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/idle_help_panel_controller.rb
Zeitwerk@rails.main: autoload set for ClaimSummariesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/claim_summaries_controller.rb
Zeitwerk@rails.main: autoload set for NotificationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/notifications_controller.rb
Zeitwerk@rails.main: autoload set for PreferencesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/preferences_controller.rb
Zeitwerk@rails.main: autoload set for Admin, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/admin
Zeitwerk@rails.main: autoload set for TimelineGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/timeline_gaps_controller.rb
Zeitwerk@rails.main: autoload set for ExpensesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/expenses_controller.rb
Zeitwerk@rails.main: autoload set for EmploymentsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/employments_controller.rb
Zeitwerk@rails.main: autoload set for PasswordsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/passwords_controller.rb
Zeitwerk@rails.main: autoload set for UsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/users_controller.rb
Zeitwerk@rails.main: autoload set for EmploymentGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/employment_gaps_controller.rb
Zeitwerk@rails.main: autoload set for UserCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/user_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for CompaniesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/companies_controller.rb
Zeitwerk@rails.main: autoload set for SessionsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/sessions_controller.rb
Zeitwerk@rails.main: autoload set for WorkLocationGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/work_location_gaps_controller.rb
Zeitwerk@rails.main: autoload set for StaticController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/static_controller.rb
Zeitwerk@rails.main: autoload set for MyRift::ClaimsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift/claims_controller.rb
Zeitwerk@rails.main: autoload set for MyRift::Controller, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift/controller.rb
Zeitwerk@rails.main: autoload set for AdminController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/admin_controller.rb
Zeitwerk@rails.main: autoload set for Api, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/api
Zeitwerk@rails.main: autoload set for WorkLocationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/work_locations_controller.rb
Zeitwerk@rails.main: autoload set for BanksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/banks_controller.rb
Zeitwerk@rails.main: autoload set for InvitationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/invitations_controller.rb
Zeitwerk@rails.main: autoload set for AddressesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/addresses_controller.rb
Zeitwerk@rails.main: autoload set for ModDataController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/mod_data_controller.rb
Zeitwerk@rails.main: autoload set for FinanceController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/finance_controller.rb
Zeitwerk@rails.main: autoload set for ScheduledCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/scheduled_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for ConfirmationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/confirmations_controller.rb
Zeitwerk@rails.main: autoload set for MyRiftController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift_controller.rb
Zeitwerk@rails.main: autoload set for DashboardController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/dashboard_controller.rb
Zeitwerk@rails.main: autoload set for VehiclesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/vehicles_controller.rb
Zeitwerk@rails.main: autoload set for PtaAuthorisationController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/pta_authorisation_controller.rb
Zeitwerk@rails.main: autoload set for RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/registrations_controller.rb
Zeitwerk@rails.main: autoload set for CommunicationPreferencesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/communication_preferences_controller.rb
Zeitwerk@rails.main: autoload set for TrackingCookie, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/concerns/tracking_cookie.rb
Zeitwerk@rails.main: autoload set for SignUpWizardMethods, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/concerns/sign_up_wizard_methods.rb
Zeitwerk@rails.main: autoload set for ClaimHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/claim_helper.rb
Zeitwerk@rails.main: autoload set for TimeHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/time_helper.rb
Zeitwerk@rails.main: autoload set for PathHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/path_helper.rb
Zeitwerk@rails.main: autoload set for VehiclesHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/vehicles_helper.rb
Zeitwerk@rails.main: autoload set for LocksHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/locks_helper.rb
Zeitwerk@rails.main: autoload set for CallCentreHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/call_centre_helper.rb
Zeitwerk@rails.main: autoload set for EnvironmentHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/environment_helper.rb
Zeitwerk@rails.main: autoload set for ApplicationHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/application_helper.rb
Zeitwerk@rails.main: autoload set for EmploymentsHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/employments_helper.rb
Zeitwerk@rails.main: autoload set for MixpanelPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/mixpanel_publisher.rb
Zeitwerk@rails.main: autoload set for PtaAuthorisation, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/pta_authorisation.rb
Zeitwerk@rails.main: autoload set for MyRiftViewPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/my_rift_view_publisher.rb
Zeitwerk@rails.main: autoload set for VehicleLookup, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/vehicle_lookup.rb
Zeitwerk@rails.main: autoload set for EventTracker, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/event_tracker.rb
Zeitwerk@rails.main: autoload set for Goldmine, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/goldmine.rb
Zeitwerk@rails.main: autoload set for EventPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/event_publisher.rb
Zeitwerk@rails.main: autoload set for Templates, to be autovivified from /Users/mikecarter/Developer/railsapp/app/lib/templates
Zeitwerk@rails.main: autoload set for Assets, to be autovivified from /Users/mikecarter/Developer/railsapp/app/lib/assets
Zeitwerk@rails.main: autoload set for GoldmineMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/goldmine_mailer.rb
Zeitwerk@rails.main: autoload set for AgentMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/agent_mailer.rb
Zeitwerk@rails.main: autoload set for CustomerMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/customer_mailer.rb
Zeitwerk@rails.main: autoload set for ApplicationMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/application_mailer.rb
Zeitwerk@rails.main: autoload set for CustomDeviseMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/custom_devise_mailer.rb
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/claim_wizard.rb is ignored because ClaimWizard is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/agent.rb is ignored because Agent is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/user_callback.rb is ignored because UserCallback is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/customer_approval.rb is ignored because CustomerApproval is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/team.rb is ignored because Team is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/model.rb is ignored because MyRift::Model is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/claim.rb is ignored because MyRift::Claim is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/claim_submission.rb is ignored because MyRift::ClaimSubmission is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/event.rb is ignored because MyRift::Event is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/application_record.rb is ignored because ApplicationRecord is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/user.rb is ignored because User is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/agent_customer_approval.rb is ignored because AgentCustomerApproval is already defined
Zeitwerk@rails.main: autoload set for DataApiLinkable, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_linkable
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_transferable.rb is ignored because DataApiTransferable is already defined
Zeitwerk@rails.main: autoload set for Confirmable, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/concerns/confirmable.rb
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/lockable.rb is ignored because Lockable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/cacheable.rb is ignored because Cacheable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/rememberable.rb is ignored because Rememberable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/activateable.rb is ignored because Activateable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_dateable.rb is ignored because DataApiDateable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/sectorable.rb is ignored because Sectorable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/token_authenticatable.rb is ignored because TokenAuthenticatable is already defined
Zeitwerk@rails.main: autoload set for FullNameValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/full_name_validator.rb
Zeitwerk@rails.main: autoload set for ReferenceNumberAvailabilityValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/reference_number_availability_validator.rb
Zeitwerk@rails.main: autoload set for StartDateValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/start_date_validator.rb
Zeitwerk@rails.main: autoload set for ReferenceNumberValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/reference_number_validator.rb
Zeitwerk@rails.main: autoload set for PhoneNumberValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/phone_number_validator.rb
Zeitwerk@rails.main: autoload set for EmailValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/email_validator.rb
Zeitwerk@rails.main: autoload set for StartedAtValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/started_at_validator.rb
Zeitwerk@rails.main: autoload set for InPastValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/in_past_validator.rb
Zeitwerk@rails.main: autoload set for ApplicationWorker, to be loaded from /Users/mikecarter/Developer/railsapp/app/workers/application_worker.rb
Zeitwerk@rails.main: autoload set for FontAwesome::Rails::IconHelper, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails/icon_helper.rb
Zeitwerk@rails.main: autoload set for Devise::InvitationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise/invitations_controller.rb
Zeitwerk@rails.main: autoload set for DeviseInvitable::RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise_invitable/registrations_controller.rb
Zeitwerk@rails.main: autoload set for Devise::OmniauthCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/omniauth_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for Devise::PasswordsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/passwords_controller.rb
Zeitwerk@rails.main: autoload set for Devise::SessionsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/sessions_controller.rb
Zeitwerk@rails.main: autoload set for Devise::UnlocksController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/unlocks_controller.rb
Zeitwerk@rails.main: autoload set for Devise::ConfirmationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/confirmations_controller.rb
Zeitwerk@rails.main: autoload set for Devise::RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/registrations_controller.rb
Zeitwerk@rails.main: autoload set for DeviseController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise_controller.rb
Zeitwerk@rails.main: autoload set for DeviseHelper, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/helpers/devise_helper.rb
Zeitwerk@rails.main: autoload set for Devise::Mailer, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise/mailer.rb
Zeitwerk@rails.main: constant Devise::Mailer loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise/mailer.rb
Zeitwerk@rails.main: constant CustomDeviseMailer loaded from file /Users/mikecarter/Developer/railsapp/app/mailers/custom_devise_mailer.rb
Zeitwerk@rails.main: constant ApplicationHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/application_helper.rb
Zeitwerk@rails.main: constant CallCentreHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/call_centre_helper.rb
Zeitwerk@rails.main: constant ClaimHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/claim_helper.rb
Zeitwerk@rails.main: constant TimeHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/time_helper.rb
Zeitwerk@rails.main: constant EmploymentsHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/employments_helper.rb
Zeitwerk@rails.main: constant EnvironmentHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/environment_helper.rb
Zeitwerk@rails.main: constant LocksHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/locks_helper.rb
Zeitwerk@rails.main: constant PathHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/path_helper.rb
Zeitwerk@rails.main: constant EventTracker loaded from file /Users/mikecarter/Developer/railsapp/app/lib/event_tracker.rb
Zeitwerk@rails.main: constant VehiclesHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/vehicles_helper.rb
Zeitwerk@rails.main: constant FontAwesome::Rails::IconHelper loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails/icon_helper.rb
Zeitwerk@rails.main: constant DeviseHelper loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/helpers/devise_helper.rb
Zeitwerk@rails.main: constant SignUpWizardMethods loaded from file /Users/mikecarter/Developer/railsapp/app/controllers/concerns/sign_up_wizard_methods.rb
Zeitwerk@rails.main: constant ApplicationController loaded from file /Users/mikecarter/Developer/railsapp/app/controllers/application_controller.rb
Zeitwerk@rails.main: constant DeviseController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise_controller.rb
Zeitwerk@rails.main: constant Devise::SessionsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/sessions_controller.rb
Zeitwerk@rails.main: constant Devise::RegistrationsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/registrations_controller.rb
Zeitwerk@rails.main: constant Devise::ConfirmationsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/confirmations_controller.rb
Zeitwerk@rails.main: constant Devise::UnlocksController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/unlocks_controller.rb
Zeitwerk@rails.main: constant Devise::PasswordsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/passwords_controller.rb

I can see some stuff in there that looks off already, so I'll have a play with it today and post here if I manage to solve anything.

fxn commented 3 years ago

Excellent. By now, I see Zeitwerk has determined Api is an implicit namespace, that is, there is no api.rb defining Api.

Since descend is on demand, by now it has not inspected subdirectories called api.

Let's see what you find out revising those things that you see are off, and if the issue persists we'll investigate more.

michaelcarter commented 3 years ago

Ok. I've added an explicit Api module. I now see that my Api::Person model looks as though it's loading, but when I attempt to access the model in the rails console I get the same error. I've included a version of the log below filtered to just include the relevant entries:


Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/api.rb is ignored because Api is already defined
...
Zeitwerk@rails.main: autoload set for Api::Person, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/person
...
Zeitwerk@rails.main: autoload set for Api::Person, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/person.rb

Then when I attempt to access the Api::Person class in the console:

> Api::Person.find(1)
NameError: uninitialized constant Api::Person
from (pry):1:in `__pry__'

I'll keep playing around with this and see if I have any luck, but do you know what I should be expecting to see in the autoloader log that would mean that Api::Person would be available to use?

fxn commented 3 years ago

No, no, Api can be an implicit namespace just fine. Could you please delete api.rb to continue debugging the project as it was originally?

Once deleted, with logs enabled, could you please execute

bin/rails runner Api

and share the traces?

I suspect something funky is going on with Api, let's see if we find out.

michaelcarter commented 3 years ago

Oops. I've now deleted the explicit api module and run that command. Full output below:

Zeitwerk@rails.main: autoload set for ReturningUsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/returning_users_controller.rb
Zeitwerk@rails.main: autoload set for IntroToMyriftController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/intro_to_myrift_controller.rb
Zeitwerk@rails.main: autoload set for DocumentsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/documents_controller.rb
Zeitwerk@rails.main: autoload set for ApplicationController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/application_controller.rb
Zeitwerk@rails.main: autoload set for Expense, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/expense
Zeitwerk@rails.main: autoload set for CommonLocationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/common_locations_controller.rb
Zeitwerk@rails.main: autoload set for ClaimWizardsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/claim_wizards_controller.rb
Zeitwerk@rails.main: autoload set for BankAccountsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/bank_accounts_controller.rb
Zeitwerk@rails.main: autoload set for IdleHelpPanelController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/idle_help_panel_controller.rb
Zeitwerk@rails.main: autoload set for ClaimSummariesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/claim_summaries_controller.rb
Zeitwerk@rails.main: autoload set for NotificationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/notifications_controller.rb
Zeitwerk@rails.main: autoload set for PreferencesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/preferences_controller.rb
Zeitwerk@rails.main: autoload set for Admin, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/admin
Zeitwerk@rails.main: autoload set for TimelineGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/timeline_gaps_controller.rb
Zeitwerk@rails.main: autoload set for ExpensesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/expenses_controller.rb
Zeitwerk@rails.main: autoload set for EmploymentsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/employments_controller.rb
Zeitwerk@rails.main: autoload set for PasswordsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/passwords_controller.rb
Zeitwerk@rails.main: autoload set for UsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/users_controller.rb
Zeitwerk@rails.main: autoload set for EmploymentGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/employment_gaps_controller.rb
Zeitwerk@rails.main: autoload set for UserCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/user_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for CompaniesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/companies_controller.rb
Zeitwerk@rails.main: autoload set for SessionsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/sessions_controller.rb
Zeitwerk@rails.main: autoload set for WorkLocationGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/work_location_gaps_controller.rb
Zeitwerk@rails.main: autoload set for StaticController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/static_controller.rb
Zeitwerk@rails.main: autoload set for MyRift::ClaimsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift/claims_controller.rb
Zeitwerk@rails.main: autoload set for MyRift::Controller, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift/controller.rb
Zeitwerk@rails.main: autoload set for AdminController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/admin_controller.rb
Zeitwerk@rails.main: autoload set for Api, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/api
Zeitwerk@rails.main: autoload set for WorkLocationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/work_locations_controller.rb
Zeitwerk@rails.main: autoload set for BanksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/banks_controller.rb
Zeitwerk@rails.main: autoload set for InvitationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/invitations_controller.rb
Zeitwerk@rails.main: autoload set for AddressesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/addresses_controller.rb
Zeitwerk@rails.main: autoload set for ModDataController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/mod_data_controller.rb
Zeitwerk@rails.main: autoload set for FinanceController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/finance_controller.rb
Zeitwerk@rails.main: autoload set for ScheduledCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/scheduled_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for ConfirmationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/confirmations_controller.rb
Zeitwerk@rails.main: autoload set for MyRiftController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift_controller.rb
Zeitwerk@rails.main: autoload set for DashboardController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/dashboard_controller.rb
Zeitwerk@rails.main: autoload set for VehiclesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/vehicles_controller.rb
Zeitwerk@rails.main: autoload set for PtaAuthorisationController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/pta_authorisation_controller.rb
Zeitwerk@rails.main: autoload set for RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/registrations_controller.rb
Zeitwerk@rails.main: autoload set for CommunicationPreferencesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/communication_preferences_controller.rb
Zeitwerk@rails.main: autoload set for TrackingCookie, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/concerns/tracking_cookie.rb
Zeitwerk@rails.main: autoload set for SignUpWizardMethods, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/concerns/sign_up_wizard_methods.rb
Zeitwerk@rails.main: autoload set for ClaimHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/claim_helper.rb
Zeitwerk@rails.main: autoload set for TimeHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/time_helper.rb
Zeitwerk@rails.main: autoload set for PathHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/path_helper.rb
Zeitwerk@rails.main: autoload set for VehiclesHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/vehicles_helper.rb
Zeitwerk@rails.main: autoload set for LocksHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/locks_helper.rb
Zeitwerk@rails.main: autoload set for CallCentreHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/call_centre_helper.rb
Zeitwerk@rails.main: autoload set for EnvironmentHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/environment_helper.rb
Zeitwerk@rails.main: autoload set for ApplicationHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/application_helper.rb
Zeitwerk@rails.main: autoload set for EmploymentsHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/employments_helper.rb
Zeitwerk@rails.main: autoload set for MixpanelPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/mixpanel_publisher.rb
Zeitwerk@rails.main: autoload set for PtaAuthorisation, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/pta_authorisation.rb
Zeitwerk@rails.main: autoload set for MyRiftViewPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/my_rift_view_publisher.rb
Zeitwerk@rails.main: autoload set for VehicleLookup, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/vehicle_lookup.rb
Zeitwerk@rails.main: autoload set for EventTracker, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/event_tracker.rb
Zeitwerk@rails.main: autoload set for Goldmine, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/goldmine.rb
Zeitwerk@rails.main: autoload set for EventPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/event_publisher.rb
Zeitwerk@rails.main: autoload set for Templates, to be autovivified from /Users/mikecarter/Developer/railsapp/app/lib/templates
Zeitwerk@rails.main: autoload set for Assets, to be autovivified from /Users/mikecarter/Developer/railsapp/app/lib/assets
Zeitwerk@rails.main: autoload set for GoldmineMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/goldmine_mailer.rb
Zeitwerk@rails.main: autoload set for AgentMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/agent_mailer.rb
Zeitwerk@rails.main: autoload set for CustomerMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/customer_mailer.rb
Zeitwerk@rails.main: autoload set for ApplicationMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/application_mailer.rb
Zeitwerk@rails.main: autoload set for CustomDeviseMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/custom_devise_mailer.rb
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/claim_wizard.rb is ignored because ClaimWizard is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/agent.rb is ignored because Agent is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/user_callback.rb is ignored because UserCallback is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/customer_approval.rb is ignored because CustomerApproval is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/team.rb is ignored because Team is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/model.rb is ignored because MyRift::Model is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/claim.rb is ignored because MyRift::Claim is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/claim_submission.rb is ignored because MyRift::ClaimSubmission is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/event.rb is ignored because MyRift::Event is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/application_record.rb is ignored because ApplicationRecord is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/user.rb is ignored because User is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/agent_customer_approval.rb is ignored because AgentCustomerApproval is already defined
Zeitwerk@rails.main: autoload set for DataApiLinkable, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_linkable
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_transferable.rb is ignored because DataApiTransferable is already defined
Zeitwerk@rails.main: autoload set for Confirmable, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/concerns/confirmable.rb
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/lockable.rb is ignored because Lockable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/cacheable.rb is ignored because Cacheable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/rememberable.rb is ignored because Rememberable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/activateable.rb is ignored because Activateable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_dateable.rb is ignored because DataApiDateable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/sectorable.rb is ignored because Sectorable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/token_authenticatable.rb is ignored because TokenAuthenticatable is already defined
Zeitwerk@rails.main: autoload set for FullNameValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/full_name_validator.rb
Zeitwerk@rails.main: autoload set for ReferenceNumberAvailabilityValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/reference_number_availability_validator.rb
Zeitwerk@rails.main: autoload set for StartDateValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/start_date_validator.rb
Zeitwerk@rails.main: autoload set for ReferenceNumberValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/reference_number_validator.rb
Zeitwerk@rails.main: autoload set for PhoneNumberValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/phone_number_validator.rb
Zeitwerk@rails.main: autoload set for EmailValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/email_validator.rb
Zeitwerk@rails.main: autoload set for StartedAtValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/started_at_validator.rb
Zeitwerk@rails.main: autoload set for InPastValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/in_past_validator.rb
Zeitwerk@rails.main: autoload set for ApplicationWorker, to be loaded from /Users/mikecarter/Developer/railsapp/app/workers/application_worker.rb
Zeitwerk@rails.main: autoload set for FontAwesome::Rails::IconHelper, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails/icon_helper.rb
Zeitwerk@rails.main: autoload set for Devise::InvitationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise/invitations_controller.rb
Zeitwerk@rails.main: autoload set for DeviseInvitable::RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise_invitable/registrations_controller.rb
Zeitwerk@rails.main: autoload set for Devise::OmniauthCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/omniauth_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for Devise::PasswordsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/passwords_controller.rb
Zeitwerk@rails.main: autoload set for Devise::SessionsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/sessions_controller.rb
Zeitwerk@rails.main: autoload set for Devise::UnlocksController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/unlocks_controller.rb
Zeitwerk@rails.main: autoload set for Devise::ConfirmationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/confirmations_controller.rb
Zeitwerk@rails.main: autoload set for Devise::RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/registrations_controller.rb
Zeitwerk@rails.main: autoload set for DeviseController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise_controller.rb
Zeitwerk@rails.main: autoload set for DeviseHelper, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/helpers/devise_helper.rb
Zeitwerk@rails.main: autoload set for Devise::Mailer, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise/mailer.rb
Zeitwerk@rails.main: constant Devise::Mailer loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise/mailer.rb
Zeitwerk@rails.main: constant CustomDeviseMailer loaded from file /Users/mikecarter/Developer/railsapp/app/mailers/custom_devise_mailer.rb
Zeitwerk@rails.main: constant ApplicationHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/application_helper.rb
Zeitwerk@rails.main: constant CallCentreHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/call_centre_helper.rb
Zeitwerk@rails.main: constant ClaimHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/claim_helper.rb
Zeitwerk@rails.main: constant TimeHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/time_helper.rb
Zeitwerk@rails.main: constant EmploymentsHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/employments_helper.rb
Zeitwerk@rails.main: constant EnvironmentHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/environment_helper.rb
Zeitwerk@rails.main: constant LocksHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/locks_helper.rb
Zeitwerk@rails.main: constant PathHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/path_helper.rb
Zeitwerk@rails.main: constant EventTracker loaded from file /Users/mikecarter/Developer/railsapp/app/lib/event_tracker.rb
Zeitwerk@rails.main: constant VehiclesHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/vehicles_helper.rb
Zeitwerk@rails.main: constant FontAwesome::Rails::IconHelper loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails/icon_helper.rb
Zeitwerk@rails.main: constant DeviseHelper loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/helpers/devise_helper.rb
Zeitwerk@rails.main: constant SignUpWizardMethods loaded from file /Users/mikecarter/Developer/railsapp/app/controllers/concerns/sign_up_wizard_methods.rb
Zeitwerk@rails.main: constant ApplicationController loaded from file /Users/mikecarter/Developer/railsapp/app/controllers/application_controller.rb
Zeitwerk@rails.main: constant DeviseController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise_controller.rb
Zeitwerk@rails.main: constant Devise::SessionsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/sessions_controller.rb
Zeitwerk@rails.main: constant Devise::RegistrationsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/registrations_controller.rb
Zeitwerk@rails.main: constant Devise::ConfirmationsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/confirmations_controller.rb
Zeitwerk@rails.main: constant Devise::UnlocksController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/unlocks_controller.rb
Zeitwerk@rails.main: constant Devise::PasswordsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/passwords_controller.rb
Zeitwerk@rails.main: module Api autovivified from directory /Users/mikecarter/Developer/railsapp/app/controllers/api
Zeitwerk@rails.main: autoload set for Api::AuthenticationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/api/authentications_controller.rb
Zeitwerk@rails.main: autoload set for Api::UsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/api/users_controller.rb
Zeitwerk@rails.main: autoload set for Api::Base, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/base.rb
Zeitwerk@rails.main: autoload set for Api::Expense, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/expense
Zeitwerk@rails.main: autoload set for Api::Person, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/person
Zeitwerk@rails.main: autoload set for Api::Notification, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/notification
Zeitwerk@rails.main: autoload set for Api::Bank, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/bank.rb
Zeitwerk@rails.main: autoload set for Api::Vehicle, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/vehicle.rb
Zeitwerk@rails.main: autoload set for Api::PhoneNumber, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/phone_number
Zeitwerk@rails.main: autoload set for Api::CommonLocation, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/common_location.rb
Zeitwerk@rails.main: autoload set for Api::Company, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/company.rb
Zeitwerk@rails.main: autoload set for Api::Person, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/person.rb
Zeitwerk@rails.main: autoload set for Api::Trade, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/trade.rb
Zeitwerk@rails.main: autoload set for Api::Address, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/address.rb
Zeitwerk@rails.main: autoload set for Api::Mod, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/mod
Zeitwerk@rails.main: autoload set for Api::Claim, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/claim
Zeitwerk@rails.main: autoload set for Api::Upload, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/upload
fxn commented 3 years ago

This looks good by now. Step by step. Now, what does

bin/rails runner Api::Person

output?

michaelcarter commented 3 years ago

Here you go! 🙂

Zeitwerk@rails.main: autoload set for ReturningUsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/returning_users_controller.rb
Zeitwerk@rails.main: autoload set for IntroToMyriftController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/intro_to_myrift_controller.rb
Zeitwerk@rails.main: autoload set for DocumentsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/documents_controller.rb
Zeitwerk@rails.main: autoload set for ApplicationController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/application_controller.rb
Zeitwerk@rails.main: autoload set for Expense, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/expense
Zeitwerk@rails.main: autoload set for CommonLocationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/common_locations_controller.rb
Zeitwerk@rails.main: autoload set for ClaimWizardsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/claim_wizards_controller.rb
Zeitwerk@rails.main: autoload set for BankAccountsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/bank_accounts_controller.rb
Zeitwerk@rails.main: autoload set for IdleHelpPanelController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/idle_help_panel_controller.rb
Zeitwerk@rails.main: autoload set for ClaimSummariesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/claim_summaries_controller.rb
Zeitwerk@rails.main: autoload set for NotificationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/notifications_controller.rb
Zeitwerk@rails.main: autoload set for PreferencesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/preferences_controller.rb
Zeitwerk@rails.main: autoload set for Admin, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/admin
Zeitwerk@rails.main: autoload set for TimelineGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/timeline_gaps_controller.rb
Zeitwerk@rails.main: autoload set for ExpensesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/expenses_controller.rb
Zeitwerk@rails.main: autoload set for EmploymentsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/employments_controller.rb
Zeitwerk@rails.main: autoload set for PasswordsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/passwords_controller.rb
Zeitwerk@rails.main: autoload set for UsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/users_controller.rb
Zeitwerk@rails.main: autoload set for EmploymentGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/employment_gaps_controller.rb
Zeitwerk@rails.main: autoload set for UserCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/user_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for CompaniesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/companies_controller.rb
Zeitwerk@rails.main: autoload set for SessionsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/sessions_controller.rb
Zeitwerk@rails.main: autoload set for WorkLocationGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/work_location_gaps_controller.rb
Zeitwerk@rails.main: autoload set for StaticController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/static_controller.rb
Zeitwerk@rails.main: autoload set for MyRift::ClaimsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift/claims_controller.rb
Zeitwerk@rails.main: autoload set for MyRift::Controller, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift/controller.rb
Zeitwerk@rails.main: autoload set for AdminController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/admin_controller.rb
Zeitwerk@rails.main: autoload set for Api, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/api
Zeitwerk@rails.main: autoload set for WorkLocationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/work_locations_controller.rb
Zeitwerk@rails.main: autoload set for BanksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/banks_controller.rb
Zeitwerk@rails.main: autoload set for InvitationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/invitations_controller.rb
Zeitwerk@rails.main: autoload set for AddressesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/addresses_controller.rb
Zeitwerk@rails.main: autoload set for ModDataController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/mod_data_controller.rb
Zeitwerk@rails.main: autoload set for FinanceController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/finance_controller.rb
Zeitwerk@rails.main: autoload set for ScheduledCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/scheduled_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for ConfirmationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/confirmations_controller.rb
Zeitwerk@rails.main: autoload set for MyRiftController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift_controller.rb
Zeitwerk@rails.main: autoload set for DashboardController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/dashboard_controller.rb
Zeitwerk@rails.main: autoload set for VehiclesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/vehicles_controller.rb
Zeitwerk@rails.main: autoload set for PtaAuthorisationController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/pta_authorisation_controller.rb
Zeitwerk@rails.main: autoload set for RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/registrations_controller.rb
Zeitwerk@rails.main: autoload set for CommunicationPreferencesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/communication_preferences_controller.rb
Zeitwerk@rails.main: autoload set for TrackingCookie, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/concerns/tracking_cookie.rb
Zeitwerk@rails.main: autoload set for SignUpWizardMethods, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/concerns/sign_up_wizard_methods.rb
Zeitwerk@rails.main: autoload set for ClaimHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/claim_helper.rb
Zeitwerk@rails.main: autoload set for TimeHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/time_helper.rb
Zeitwerk@rails.main: autoload set for PathHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/path_helper.rb
Zeitwerk@rails.main: autoload set for VehiclesHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/vehicles_helper.rb
Zeitwerk@rails.main: autoload set for LocksHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/locks_helper.rb
Zeitwerk@rails.main: autoload set for CallCentreHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/call_centre_helper.rb
Zeitwerk@rails.main: autoload set for EnvironmentHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/environment_helper.rb
Zeitwerk@rails.main: autoload set for ApplicationHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/application_helper.rb
Zeitwerk@rails.main: autoload set for EmploymentsHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/employments_helper.rb
Zeitwerk@rails.main: autoload set for MixpanelPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/mixpanel_publisher.rb
Zeitwerk@rails.main: autoload set for PtaAuthorisation, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/pta_authorisation.rb
Zeitwerk@rails.main: autoload set for MyRiftViewPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/my_rift_view_publisher.rb
Zeitwerk@rails.main: autoload set for VehicleLookup, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/vehicle_lookup.rb
Zeitwerk@rails.main: autoload set for EventTracker, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/event_tracker.rb
Zeitwerk@rails.main: autoload set for Goldmine, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/goldmine.rb
Zeitwerk@rails.main: autoload set for EventPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/event_publisher.rb
Zeitwerk@rails.main: autoload set for Templates, to be autovivified from /Users/mikecarter/Developer/railsapp/app/lib/templates
Zeitwerk@rails.main: autoload set for Assets, to be autovivified from /Users/mikecarter/Developer/railsapp/app/lib/assets
Zeitwerk@rails.main: autoload set for GoldmineMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/goldmine_mailer.rb
Zeitwerk@rails.main: autoload set for AgentMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/agent_mailer.rb
Zeitwerk@rails.main: autoload set for CustomerMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/customer_mailer.rb
Zeitwerk@rails.main: autoload set for ApplicationMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/application_mailer.rb
Zeitwerk@rails.main: autoload set for CustomDeviseMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/custom_devise_mailer.rb
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/claim_wizard.rb is ignored because ClaimWizard is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/agent.rb is ignored because Agent is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/user_callback.rb is ignored because UserCallback is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/customer_approval.rb is ignored because CustomerApproval is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/team.rb is ignored because Team is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/model.rb is ignored because MyRift::Model is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/claim.rb is ignored because MyRift::Claim is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/claim_submission.rb is ignored because MyRift::ClaimSubmission is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/event.rb is ignored because MyRift::Event is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/application_record.rb is ignored because ApplicationRecord is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/user.rb is ignored because User is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/agent_customer_approval.rb is ignored because AgentCustomerApproval is already defined
Zeitwerk@rails.main: autoload set for DataApiLinkable, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_linkable
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_transferable.rb is ignored because DataApiTransferable is already defined
Zeitwerk@rails.main: autoload set for Confirmable, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/concerns/confirmable.rb
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/lockable.rb is ignored because Lockable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/cacheable.rb is ignored because Cacheable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/rememberable.rb is ignored because Rememberable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/activateable.rb is ignored because Activateable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_dateable.rb is ignored because DataApiDateable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/sectorable.rb is ignored because Sectorable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/token_authenticatable.rb is ignored because TokenAuthenticatable is already defined
Zeitwerk@rails.main: autoload set for FullNameValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/full_name_validator.rb
Zeitwerk@rails.main: autoload set for ReferenceNumberAvailabilityValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/reference_number_availability_validator.rb
Zeitwerk@rails.main: autoload set for StartDateValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/start_date_validator.rb
Zeitwerk@rails.main: autoload set for ReferenceNumberValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/reference_number_validator.rb
Zeitwerk@rails.main: autoload set for PhoneNumberValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/phone_number_validator.rb
Zeitwerk@rails.main: autoload set for EmailValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/email_validator.rb
Zeitwerk@rails.main: autoload set for StartedAtValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/started_at_validator.rb
Zeitwerk@rails.main: autoload set for InPastValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/in_past_validator.rb
Zeitwerk@rails.main: autoload set for ApplicationWorker, to be loaded from /Users/mikecarter/Developer/railsapp/app/workers/application_worker.rb
Zeitwerk@rails.main: autoload set for FontAwesome::Rails::IconHelper, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails/icon_helper.rb
Zeitwerk@rails.main: autoload set for Devise::InvitationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise/invitations_controller.rb
Zeitwerk@rails.main: autoload set for DeviseInvitable::RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise_invitable/registrations_controller.rb
Zeitwerk@rails.main: autoload set for Devise::OmniauthCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/omniauth_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for Devise::PasswordsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/passwords_controller.rb
Zeitwerk@rails.main: autoload set for Devise::SessionsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/sessions_controller.rb
Zeitwerk@rails.main: autoload set for Devise::UnlocksController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/unlocks_controller.rb
Zeitwerk@rails.main: autoload set for Devise::ConfirmationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/confirmations_controller.rb
Zeitwerk@rails.main: autoload set for Devise::RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/registrations_controller.rb
Zeitwerk@rails.main: autoload set for DeviseController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise_controller.rb
Zeitwerk@rails.main: autoload set for DeviseHelper, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/helpers/devise_helper.rb
Zeitwerk@rails.main: autoload set for Devise::Mailer, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise/mailer.rb
Zeitwerk@rails.main: constant Devise::Mailer loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise/mailer.rb
Zeitwerk@rails.main: constant CustomDeviseMailer loaded from file /Users/mikecarter/Developer/railsapp/app/mailers/custom_devise_mailer.rb
Zeitwerk@rails.main: constant ApplicationHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/application_helper.rb
Zeitwerk@rails.main: constant CallCentreHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/call_centre_helper.rb
Zeitwerk@rails.main: constant ClaimHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/claim_helper.rb
Zeitwerk@rails.main: constant TimeHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/time_helper.rb
Zeitwerk@rails.main: constant EmploymentsHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/employments_helper.rb
Zeitwerk@rails.main: constant EnvironmentHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/environment_helper.rb
Zeitwerk@rails.main: constant LocksHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/locks_helper.rb
Zeitwerk@rails.main: constant PathHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/path_helper.rb
Zeitwerk@rails.main: constant EventTracker loaded from file /Users/mikecarter/Developer/railsapp/app/lib/event_tracker.rb
Zeitwerk@rails.main: constant VehiclesHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/vehicles_helper.rb
Zeitwerk@rails.main: constant FontAwesome::Rails::IconHelper loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails/icon_helper.rb
Zeitwerk@rails.main: constant DeviseHelper loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/helpers/devise_helper.rb
Zeitwerk@rails.main: constant SignUpWizardMethods loaded from file /Users/mikecarter/Developer/railsapp/app/controllers/concerns/sign_up_wizard_methods.rb
Zeitwerk@rails.main: constant ApplicationController loaded from file /Users/mikecarter/Developer/railsapp/app/controllers/application_controller.rb
Zeitwerk@rails.main: constant DeviseController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise_controller.rb
Zeitwerk@rails.main: constant Devise::SessionsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/sessions_controller.rb
Zeitwerk@rails.main: constant Devise::RegistrationsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/registrations_controller.rb
Zeitwerk@rails.main: constant Devise::ConfirmationsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/confirmations_controller.rb
Zeitwerk@rails.main: constant Devise::UnlocksController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/unlocks_controller.rb
Zeitwerk@rails.main: constant Devise::PasswordsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/passwords_controller.rb
Zeitwerk@rails.main: module Api autovivified from directory /Users/mikecarter/Developer/railsapp/app/controllers/api
Zeitwerk@rails.main: autoload set for Api::AuthenticationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/api/authentications_controller.rb
Zeitwerk@rails.main: autoload set for Api::UsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/api/users_controller.rb
Zeitwerk@rails.main: autoload set for Api::Base, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/base.rb
Zeitwerk@rails.main: autoload set for Api::Expense, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/expense
Zeitwerk@rails.main: autoload set for Api::Person, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/person
Zeitwerk@rails.main: autoload set for Api::Notification, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/notification
Zeitwerk@rails.main: autoload set for Api::Bank, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/bank.rb
Zeitwerk@rails.main: autoload set for Api::Vehicle, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/vehicle.rb
Zeitwerk@rails.main: autoload set for Api::PhoneNumber, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/phone_number
Zeitwerk@rails.main: autoload set for Api::CommonLocation, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/common_location.rb
Zeitwerk@rails.main: autoload set for Api::Company, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/company.rb
Zeitwerk@rails.main: autoload set for Api::Person, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/person.rb
Zeitwerk@rails.main: autoload set for Api::Trade, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/trade.rb
Zeitwerk@rails.main: autoload set for Api::Address, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/address.rb
Zeitwerk@rails.main: autoload set for Api::Mod, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/mod
Zeitwerk@rails.main: autoload set for Api::Claim, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/claim
Zeitwerk@rails.main: autoload set for Api::Upload, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/upload
Please specify a valid ruby command or the path of a script to run.
Run 'rails runner -h' for help.

uninitialized constant Api::Person
fxn commented 3 years ago

Something is off, that kind of directory structure works routinely well since the beginning.

I added a few traces in recent commits, could you please upgrade to 2.5.0.beta3 and run the previous command again?

michaelcarter commented 3 years ago

Here you go:

Zeitwerk@rails.main: autoload set for ReturningUsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/returning_users_controller.rb
Zeitwerk@rails.main: autoload set for IntroToMyriftController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/intro_to_myrift_controller.rb
Zeitwerk@rails.main: autoload set for DocumentsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/documents_controller.rb
Zeitwerk@rails.main: autoload set for ApplicationController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/application_controller.rb
Zeitwerk@rails.main: autoload set for Expense, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/expense
Zeitwerk@rails.main: autoload set for CommonLocationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/common_locations_controller.rb
Zeitwerk@rails.main: autoload set for ClaimWizardsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/claim_wizards_controller.rb
Zeitwerk@rails.main: autoload set for BankAccountsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/bank_accounts_controller.rb
Zeitwerk@rails.main: autoload set for IdleHelpPanelController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/idle_help_panel_controller.rb
Zeitwerk@rails.main: autoload set for ClaimSummariesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/claim_summaries_controller.rb
Zeitwerk@rails.main: autoload set for NotificationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/notifications_controller.rb
Zeitwerk@rails.main: autoload set for PreferencesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/preferences_controller.rb
Zeitwerk@rails.main: autoload set for Admin, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/admin
Zeitwerk@rails.main: autoload set for TimelineGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/timeline_gaps_controller.rb
Zeitwerk@rails.main: autoload set for ExpensesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/expenses_controller.rb
Zeitwerk@rails.main: autoload set for EmploymentsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/employments_controller.rb
Zeitwerk@rails.main: autoload set for PasswordsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/passwords_controller.rb
Zeitwerk@rails.main: autoload set for UsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/users_controller.rb
Zeitwerk@rails.main: autoload set for EmploymentGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/employment_gaps_controller.rb
Zeitwerk@rails.main: autoload set for UserCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/user_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for CompaniesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/companies_controller.rb
Zeitwerk@rails.main: autoload set for SessionsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/sessions_controller.rb
Zeitwerk@rails.main: autoload set for WorkLocationGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/work_location_gaps_controller.rb
Zeitwerk@rails.main: autoload set for StaticController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/static_controller.rb
Zeitwerk@rails.main: the namespace MyRift already exists, descending into /Users/mikecarter/Developer/railsapp/app/controllers/my_rift
Zeitwerk@rails.main: autoload set for MyRift::ClaimsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift/claims_controller.rb
Zeitwerk@rails.main: autoload set for MyRift::Controller, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift/controller.rb
Zeitwerk@rails.main: autoload set for AdminController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/admin_controller.rb
Zeitwerk@rails.main: autoload set for Api, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/api
Zeitwerk@rails.main: autoload set for WorkLocationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/work_locations_controller.rb
Zeitwerk@rails.main: autoload set for BanksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/banks_controller.rb
Zeitwerk@rails.main: autoload set for InvitationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/invitations_controller.rb
Zeitwerk@rails.main: autoload set for AddressesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/addresses_controller.rb
Zeitwerk@rails.main: autoload set for ModDataController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/mod_data_controller.rb
Zeitwerk@rails.main: autoload set for FinanceController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/finance_controller.rb
Zeitwerk@rails.main: autoload set for ScheduledCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/scheduled_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for ConfirmationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/confirmations_controller.rb
Zeitwerk@rails.main: autoload set for MyRiftController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift_controller.rb
Zeitwerk@rails.main: autoload set for DashboardController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/dashboard_controller.rb
Zeitwerk@rails.main: autoload set for VehiclesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/vehicles_controller.rb
Zeitwerk@rails.main: autoload set for PtaAuthorisationController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/pta_authorisation_controller.rb
Zeitwerk@rails.main: autoload set for RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/registrations_controller.rb
Zeitwerk@rails.main: autoload set for CommunicationPreferencesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/communication_preferences_controller.rb
Zeitwerk@rails.main: autoload set for TrackingCookie, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/concerns/tracking_cookie.rb
Zeitwerk@rails.main: autoload set for SignUpWizardMethods, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/concerns/sign_up_wizard_methods.rb
Zeitwerk@rails.main: autoload set for ClaimHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/claim_helper.rb
Zeitwerk@rails.main: autoload set for TimeHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/time_helper.rb
Zeitwerk@rails.main: autoload set for PathHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/path_helper.rb
Zeitwerk@rails.main: autoload set for VehiclesHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/vehicles_helper.rb
Zeitwerk@rails.main: autoload set for LocksHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/locks_helper.rb
Zeitwerk@rails.main: autoload set for CallCentreHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/call_centre_helper.rb
Zeitwerk@rails.main: autoload set for EnvironmentHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/environment_helper.rb
Zeitwerk@rails.main: autoload set for ApplicationHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/application_helper.rb
Zeitwerk@rails.main: autoload set for EmploymentsHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/employments_helper.rb
Zeitwerk@rails.main: autoload set for MixpanelPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/mixpanel_publisher.rb
Zeitwerk@rails.main: autoload set for PtaAuthorisation, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/pta_authorisation.rb
Zeitwerk@rails.main: autoload set for MyRiftViewPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/my_rift_view_publisher.rb
Zeitwerk@rails.main: autoload set for VehicleLookup, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/vehicle_lookup.rb
Zeitwerk@rails.main: autoload set for EventTracker, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/event_tracker.rb
Zeitwerk@rails.main: autoload set for Goldmine, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/goldmine.rb
Zeitwerk@rails.main: autoload set for EventPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/event_publisher.rb
Zeitwerk@rails.main: autoload set for Templates, to be autovivified from /Users/mikecarter/Developer/railsapp/app/lib/templates
Zeitwerk@rails.main: autoload set for Assets, to be autovivified from /Users/mikecarter/Developer/railsapp/app/lib/assets
Zeitwerk@rails.main: autoload set for GoldmineMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/goldmine_mailer.rb
Zeitwerk@rails.main: autoload set for AgentMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/agent_mailer.rb
Zeitwerk@rails.main: autoload set for CustomerMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/customer_mailer.rb
Zeitwerk@rails.main: autoload set for ApplicationMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/application_mailer.rb
Zeitwerk@rails.main: autoload set for CustomDeviseMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/custom_devise_mailer.rb
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/claim_wizard.rb is ignored because ClaimWizard is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/agent.rb is ignored because Agent is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/user_callback.rb is ignored because UserCallback is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/customer_approval.rb is ignored because CustomerApproval is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/team.rb is ignored because Team is already defined
Zeitwerk@rails.main: the namespace MyRift already exists, descending into /Users/mikecarter/Developer/railsapp/app/models/my_rift
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/model.rb is ignored because MyRift::Model is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/claim.rb is ignored because MyRift::Claim is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/claim_submission.rb is ignored because MyRift::ClaimSubmission is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/event.rb is ignored because MyRift::Event is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/application_record.rb is ignored because ApplicationRecord is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/user.rb is ignored because User is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/agent_customer_approval.rb is ignored because AgentCustomerApproval is already defined
Zeitwerk@rails.main: autoload set for DataApiLinkable, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_linkable
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_transferable.rb is ignored because DataApiTransferable is already defined
Zeitwerk@rails.main: autoload set for Confirmable, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/concerns/confirmable.rb
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/lockable.rb is ignored because Lockable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/cacheable.rb is ignored because Cacheable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/rememberable.rb is ignored because Rememberable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/activateable.rb is ignored because Activateable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_dateable.rb is ignored because DataApiDateable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/sectorable.rb is ignored because Sectorable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/token_authenticatable.rb is ignored because TokenAuthenticatable is already defined
Zeitwerk@rails.main: autoload set for FullNameValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/full_name_validator.rb
Zeitwerk@rails.main: autoload set for ReferenceNumberAvailabilityValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/reference_number_availability_validator.rb
Zeitwerk@rails.main: autoload set for StartDateValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/start_date_validator.rb
Zeitwerk@rails.main: autoload set for ReferenceNumberValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/reference_number_validator.rb
Zeitwerk@rails.main: autoload set for PhoneNumberValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/phone_number_validator.rb
Zeitwerk@rails.main: autoload set for EmailValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/email_validator.rb
Zeitwerk@rails.main: autoload set for StartedAtValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/started_at_validator.rb
Zeitwerk@rails.main: autoload set for InPastValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/in_past_validator.rb
Zeitwerk@rails.main: autoload set for ApplicationWorker, to be loaded from /Users/mikecarter/Developer/railsapp/app/workers/application_worker.rb
Zeitwerk@rails.main: the namespace FontAwesome already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome
Zeitwerk@rails.main: the namespace FontAwesome::Rails already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails
Zeitwerk@rails.main: autoload set for FontAwesome::Rails::IconHelper, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails/icon_helper.rb
Zeitwerk@rails.main: the namespace Devise already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise
Zeitwerk@rails.main: autoload set for Devise::InvitationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise/invitations_controller.rb
Zeitwerk@rails.main: the namespace DeviseInvitable already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise_invitable
Zeitwerk@rails.main: autoload set for DeviseInvitable::RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise_invitable/registrations_controller.rb
Zeitwerk@rails.main: the namespace Devise already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise
Zeitwerk@rails.main: autoload set for Devise::OmniauthCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/omniauth_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for Devise::PasswordsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/passwords_controller.rb
Zeitwerk@rails.main: autoload set for Devise::SessionsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/sessions_controller.rb
Zeitwerk@rails.main: autoload set for Devise::UnlocksController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/unlocks_controller.rb
Zeitwerk@rails.main: autoload set for Devise::ConfirmationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/confirmations_controller.rb
Zeitwerk@rails.main: autoload set for Devise::RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/registrations_controller.rb
Zeitwerk@rails.main: autoload set for DeviseController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise_controller.rb
Zeitwerk@rails.main: autoload set for DeviseHelper, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/helpers/devise_helper.rb
Zeitwerk@rails.main: the namespace Devise already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise
Zeitwerk@rails.main: autoload set for Devise::Mailer, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise/mailer.rb
Zeitwerk@rails.main: constant Devise::Mailer loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise/mailer.rb
Zeitwerk@rails.main: constant CustomDeviseMailer loaded from file /Users/mikecarter/Developer/railsapp/app/mailers/custom_devise_mailer.rb
Zeitwerk@rails.main: constant ApplicationHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/application_helper.rb
Zeitwerk@rails.main: constant CallCentreHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/call_centre_helper.rb
Zeitwerk@rails.main: constant ClaimHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/claim_helper.rb
Zeitwerk@rails.main: constant TimeHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/time_helper.rb
Zeitwerk@rails.main: constant EmploymentsHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/employments_helper.rb
Zeitwerk@rails.main: constant EnvironmentHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/environment_helper.rb
Zeitwerk@rails.main: constant LocksHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/locks_helper.rb
Zeitwerk@rails.main: constant PathHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/path_helper.rb
Zeitwerk@rails.main: constant EventTracker loaded from file /Users/mikecarter/Developer/railsapp/app/lib/event_tracker.rb
Zeitwerk@rails.main: constant VehiclesHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/vehicles_helper.rb
Zeitwerk@rails.main: constant FontAwesome::Rails::IconHelper loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails/icon_helper.rb
Zeitwerk@rails.main: constant DeviseHelper loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/helpers/devise_helper.rb
Zeitwerk@rails.main: constant SignUpWizardMethods loaded from file /Users/mikecarter/Developer/railsapp/app/controllers/concerns/sign_up_wizard_methods.rb
Zeitwerk@rails.main: constant ApplicationController loaded from file /Users/mikecarter/Developer/railsapp/app/controllers/application_controller.rb
Zeitwerk@rails.main: constant DeviseController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise_controller.rb
Zeitwerk@rails.main: constant Devise::SessionsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/sessions_controller.rb
Zeitwerk@rails.main: constant Devise::RegistrationsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/registrations_controller.rb
Zeitwerk@rails.main: constant Devise::ConfirmationsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/confirmations_controller.rb
Zeitwerk@rails.main: constant Devise::UnlocksController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/unlocks_controller.rb
Zeitwerk@rails.main: constant Devise::PasswordsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/passwords_controller.rb
Zeitwerk@rails.main: module Api autovivified from directory /Users/mikecarter/Developer/railsapp/app/controllers/api
Zeitwerk@rails.main: autoload set for Api::AuthenticationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/api/authentications_controller.rb
Zeitwerk@rails.main: autoload set for Api::UsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/api/users_controller.rb
Zeitwerk@rails.main: autoload set for Api::Base, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/base.rb
Zeitwerk@rails.main: autoload set for Api::Expense, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/expense
Zeitwerk@rails.main: autoload set for Api::Person, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/person
Zeitwerk@rails.main: autoload set for Api::Notification, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/notification
Zeitwerk@rails.main: autoload set for Api::Bank, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/bank.rb
Zeitwerk@rails.main: autoload set for Api::Vehicle, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/vehicle.rb
Zeitwerk@rails.main: autoload set for Api::PhoneNumber, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/phone_number
Zeitwerk@rails.main: autoload set for Api::CommonLocation, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/common_location.rb
Zeitwerk@rails.main: autoload set for Api::Company, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/company.rb
Zeitwerk@rails.main: earlier autoload for Api::Person discarded, it is actually an explicit namespace defined in /Users/mikecarter/Developer/railsapp/app/models/api/person.rb
Zeitwerk@rails.main: autoload set for Api::Person, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/person.rb
Zeitwerk@rails.main: autoload set for Api::Trade, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/trade.rb
Zeitwerk@rails.main: autoload set for Api::Address, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/address.rb
Zeitwerk@rails.main: autoload set for Api::Mod, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/mod
Zeitwerk@rails.main: autoload set for Api::Claim, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/claim
Zeitwerk@rails.main: autoload set for Api::Upload, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/upload
Please specify a valid ruby command or the path of a script to run.
Run 'rails runner -h' for help.

uninitialized constant Api::Person
fxn commented 3 years ago

Can you autoload any of the constants below Api? For example Api::UsersController? Or Api::Vehicle?

fxn commented 3 years ago

BTW, with Zeitwerk it does not matter if the style is

module Api
  class UsersController < ApplicationController
  end
end

or

class Api::UsersController < ApplicationController
end

It is a feature of the library that both ways work.

michaelcarter commented 3 years ago

It looks as though I can instantiate anything in models/api as long as it isn't referenced by a nested class within the same namespace using a "belongs_to" association with an explicit class name.

For example, I have Api::Bank defined in models/api/bank.rb. It wont load in the console until I update Api::Person::BankAccount in models/api/person/bank_account.rb to remove the belongs_to association (the only other place Api::Bank is referenced directly in my models).

Can't load Api::Bank in the rails console:

class Api::Person::BankAccount < Api::Base
  belongs_to :bank, class_name: Api::Bank
end

Can load Api::Bank in the rails console with this association commented out:

class Api::Person::BankAccount < Api::Base
 #  belongs_to :bank, class_name: Api::Bank
end

I'm not sure if it's significant, but these Api models are all active resource models.

fxn commented 3 years ago

OK, we got something. I'll try to follow that hint and reproduce.

Meanwhile, you could update the code, the option :class_name has to be a string. It is the name of the class, not the class itself.

The issue remains open anyway, I'll try to reproduce in a minimal project.

michaelcarter commented 3 years ago

Ok, thank you very much for your help so far! I've updated the :class_name option to be a string throughout the project. I don't think this has solved the issue but it's giving me a clearer pattern to work with.

Now, if a class within models/api has further subdirectories containing classes within the same namespace, then they won't load. For example models/api/vehicle.rb (Api::Vehicle) loads, but when I create a new class models/api/vehicle/thing.rb (Api::Vehicle::Thing) neither class loads.

In order to get Api::Vehicle (or any class directly within the models/api) loading, I'm also having to define an empty Api module in models/api.rb. I know I shouldn't have to do this, but thought it might offer a clue.

I've deleted that explicitly defined Api module, and included the latest bin/rails runner Api output below in case it's of use. I'll pick this back up tomorrow when I have a fresh head and see if anything clicks into place!:

Zeitwerk@rails.main: autoload set for ReturningUsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/returning_users_controller.rb
Zeitwerk@rails.main: autoload set for IntroToMyriftController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/intro_to_myrift_controller.rb
Zeitwerk@rails.main: autoload set for DocumentsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/documents_controller.rb
Zeitwerk@rails.main: autoload set for ApplicationController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/application_controller.rb
Zeitwerk@rails.main: autoload set for Expense, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/expense
Zeitwerk@rails.main: autoload set for CommonLocationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/common_locations_controller.rb
Zeitwerk@rails.main: autoload set for ClaimWizardsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/claim_wizards_controller.rb
Zeitwerk@rails.main: autoload set for BankAccountsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/bank_accounts_controller.rb
Zeitwerk@rails.main: autoload set for IdleHelpPanelController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/idle_help_panel_controller.rb
Zeitwerk@rails.main: autoload set for ClaimSummariesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/claim_summaries_controller.rb
Zeitwerk@rails.main: autoload set for NotificationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/notifications_controller.rb
Zeitwerk@rails.main: autoload set for PreferencesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/preferences_controller.rb
Zeitwerk@rails.main: autoload set for Admin, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/admin
Zeitwerk@rails.main: autoload set for TimelineGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/timeline_gaps_controller.rb
Zeitwerk@rails.main: autoload set for ExpensesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/expenses_controller.rb
Zeitwerk@rails.main: autoload set for EmploymentsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/employments_controller.rb
Zeitwerk@rails.main: autoload set for PasswordsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/passwords_controller.rb
Zeitwerk@rails.main: autoload set for UsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/users_controller.rb
Zeitwerk@rails.main: autoload set for EmploymentGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/employment_gaps_controller.rb
Zeitwerk@rails.main: autoload set for UserCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/user_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for CompaniesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/companies_controller.rb
Zeitwerk@rails.main: autoload set for SessionsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/sessions_controller.rb
Zeitwerk@rails.main: autoload set for WorkLocationGapsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/work_location_gaps_controller.rb
Zeitwerk@rails.main: autoload set for StaticController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/static_controller.rb
Zeitwerk@rails.main: the namespace MyRift already exists, descending into /Users/mikecarter/Developer/railsapp/app/controllers/my_rift
Zeitwerk@rails.main: autoload set for MyRift::ClaimsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift/claims_controller.rb
Zeitwerk@rails.main: autoload set for MyRift::Controller, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift/controller.rb
Zeitwerk@rails.main: autoload set for AdminController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/admin_controller.rb
Zeitwerk@rails.main: autoload set for Api, to be autovivified from /Users/mikecarter/Developer/railsapp/app/controllers/api
Zeitwerk@rails.main: autoload set for WorkLocationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/work_locations_controller.rb
Zeitwerk@rails.main: autoload set for BanksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/banks_controller.rb
Zeitwerk@rails.main: autoload set for InvitationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/invitations_controller.rb
Zeitwerk@rails.main: autoload set for AddressesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/addresses_controller.rb
Zeitwerk@rails.main: autoload set for ModDataController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/mod_data_controller.rb
Zeitwerk@rails.main: autoload set for FinanceController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/finance_controller.rb
Zeitwerk@rails.main: autoload set for ScheduledCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/scheduled_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for ConfirmationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/confirmations_controller.rb
Zeitwerk@rails.main: autoload set for MyRiftController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/my_rift_controller.rb
Zeitwerk@rails.main: autoload set for DashboardController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/dashboard_controller.rb
Zeitwerk@rails.main: autoload set for VehiclesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/vehicles_controller.rb
Zeitwerk@rails.main: autoload set for PtaAuthorisationController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/pta_authorisation_controller.rb
Zeitwerk@rails.main: autoload set for RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/registrations_controller.rb
Zeitwerk@rails.main: autoload set for CommunicationPreferencesController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/communication_preferences_controller.rb
Zeitwerk@rails.main: autoload set for TrackingCookie, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/concerns/tracking_cookie.rb
Zeitwerk@rails.main: autoload set for SignUpWizardMethods, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/concerns/sign_up_wizard_methods.rb
Zeitwerk@rails.main: autoload set for ClaimHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/claim_helper.rb
Zeitwerk@rails.main: autoload set for TimeHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/time_helper.rb
Zeitwerk@rails.main: autoload set for PathHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/path_helper.rb
Zeitwerk@rails.main: autoload set for VehiclesHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/vehicles_helper.rb
Zeitwerk@rails.main: autoload set for LocksHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/locks_helper.rb
Zeitwerk@rails.main: autoload set for CallCentreHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/call_centre_helper.rb
Zeitwerk@rails.main: autoload set for EnvironmentHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/environment_helper.rb
Zeitwerk@rails.main: autoload set for ApplicationHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/application_helper.rb
Zeitwerk@rails.main: autoload set for EmploymentsHelper, to be loaded from /Users/mikecarter/Developer/railsapp/app/helpers/employments_helper.rb
Zeitwerk@rails.main: autoload set for MixpanelPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/mixpanel_publisher.rb
Zeitwerk@rails.main: autoload set for PtaAuthorisation, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/pta_authorisation.rb
Zeitwerk@rails.main: autoload set for MyRiftViewPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/my_rift_view_publisher.rb
Zeitwerk@rails.main: autoload set for VehicleLookup, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/vehicle_lookup.rb
Zeitwerk@rails.main: autoload set for EventTracker, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/event_tracker.rb
Zeitwerk@rails.main: autoload set for Goldmine, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/goldmine.rb
Zeitwerk@rails.main: autoload set for EventPublisher, to be loaded from /Users/mikecarter/Developer/railsapp/app/lib/event_publisher.rb
Zeitwerk@rails.main: autoload set for Templates, to be autovivified from /Users/mikecarter/Developer/railsapp/app/lib/templates
Zeitwerk@rails.main: autoload set for Assets, to be autovivified from /Users/mikecarter/Developer/railsapp/app/lib/assets
Zeitwerk@rails.main: autoload set for GoldmineMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/goldmine_mailer.rb
Zeitwerk@rails.main: autoload set for AgentMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/agent_mailer.rb
Zeitwerk@rails.main: autoload set for CustomerMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/customer_mailer.rb
Zeitwerk@rails.main: autoload set for ApplicationMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/application_mailer.rb
Zeitwerk@rails.main: autoload set for CustomDeviseMailer, to be loaded from /Users/mikecarter/Developer/railsapp/app/mailers/custom_devise_mailer.rb
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/claim_wizard.rb is ignored because ClaimWizard is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/agent.rb is ignored because Agent is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/user_callback.rb is ignored because UserCallback is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/customer_approval.rb is ignored because CustomerApproval is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/team.rb is ignored because Team is already defined
Zeitwerk@rails.main: the namespace MyRift already exists, descending into /Users/mikecarter/Developer/railsapp/app/models/my_rift
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/model.rb is ignored because MyRift::Model is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/claim.rb is ignored because MyRift::Claim is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/claim_submission.rb is ignored because MyRift::ClaimSubmission is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/my_rift/event.rb is ignored because MyRift::Event is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/application_record.rb is ignored because ApplicationRecord is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/user.rb is ignored because User is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/agent_customer_approval.rb is ignored because AgentCustomerApproval is already defined
Zeitwerk@rails.main: autoload set for DataApiLinkable, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_linkable
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_transferable.rb is ignored because DataApiTransferable is already defined
Zeitwerk@rails.main: autoload set for Confirmable, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/concerns/confirmable.rb
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/lockable.rb is ignored because Lockable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/cacheable.rb is ignored because Cacheable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/rememberable.rb is ignored because Rememberable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/activateable.rb is ignored because Activateable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/data_api_dateable.rb is ignored because DataApiDateable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/sectorable.rb is ignored because Sectorable is already defined
Zeitwerk@rails.main: file /Users/mikecarter/Developer/railsapp/app/models/concerns/token_authenticatable.rb is ignored because TokenAuthenticatable is already defined
Zeitwerk@rails.main: autoload set for FullNameValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/full_name_validator.rb
Zeitwerk@rails.main: autoload set for ReferenceNumberAvailabilityValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/reference_number_availability_validator.rb
Zeitwerk@rails.main: autoload set for StartDateValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/start_date_validator.rb
Zeitwerk@rails.main: autoload set for ReferenceNumberValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/reference_number_validator.rb
Zeitwerk@rails.main: autoload set for PhoneNumberValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/phone_number_validator.rb
Zeitwerk@rails.main: autoload set for EmailValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/email_validator.rb
Zeitwerk@rails.main: autoload set for StartedAtValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/started_at_validator.rb
Zeitwerk@rails.main: autoload set for InPastValidator, to be loaded from /Users/mikecarter/Developer/railsapp/app/validators/in_past_validator.rb
Zeitwerk@rails.main: autoload set for ApplicationWorker, to be loaded from /Users/mikecarter/Developer/railsapp/app/workers/application_worker.rb
Zeitwerk@rails.main: the namespace FontAwesome already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome
Zeitwerk@rails.main: the namespace FontAwesome::Rails already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails
Zeitwerk@rails.main: autoload set for FontAwesome::Rails::IconHelper, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails/icon_helper.rb
Zeitwerk@rails.main: the namespace Devise already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise
Zeitwerk@rails.main: autoload set for Devise::InvitationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise/invitations_controller.rb
Zeitwerk@rails.main: the namespace DeviseInvitable already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise_invitable
Zeitwerk@rails.main: autoload set for DeviseInvitable::RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise_invitable-2.0.5/app/controllers/devise_invitable/registrations_controller.rb
Zeitwerk@rails.main: the namespace Devise already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise
Zeitwerk@rails.main: autoload set for Devise::OmniauthCallbacksController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/omniauth_callbacks_controller.rb
Zeitwerk@rails.main: autoload set for Devise::PasswordsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/passwords_controller.rb
Zeitwerk@rails.main: autoload set for Devise::SessionsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/sessions_controller.rb
Zeitwerk@rails.main: autoload set for Devise::UnlocksController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/unlocks_controller.rb
Zeitwerk@rails.main: autoload set for Devise::ConfirmationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/confirmations_controller.rb
Zeitwerk@rails.main: autoload set for Devise::RegistrationsController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/registrations_controller.rb
Zeitwerk@rails.main: autoload set for DeviseController, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise_controller.rb
Zeitwerk@rails.main: autoload set for DeviseHelper, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/helpers/devise_helper.rb
Zeitwerk@rails.main: the namespace Devise already exists, descending into /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise
Zeitwerk@rails.main: autoload set for Devise::Mailer, to be loaded from /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise/mailer.rb
Zeitwerk@rails.main: constant Devise::Mailer loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/mailers/devise/mailer.rb
Zeitwerk@rails.main: constant CustomDeviseMailer loaded from file /Users/mikecarter/Developer/railsapp/app/mailers/custom_devise_mailer.rb
Zeitwerk@rails.main: constant ApplicationHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/application_helper.rb
Zeitwerk@rails.main: constant CallCentreHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/call_centre_helper.rb
Zeitwerk@rails.main: constant ClaimHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/claim_helper.rb
Zeitwerk@rails.main: constant TimeHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/time_helper.rb
Zeitwerk@rails.main: constant EmploymentsHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/employments_helper.rb
Zeitwerk@rails.main: constant EnvironmentHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/environment_helper.rb
Zeitwerk@rails.main: constant LocksHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/locks_helper.rb
Zeitwerk@rails.main: constant PathHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/path_helper.rb
Zeitwerk@rails.main: constant EventTracker loaded from file /Users/mikecarter/Developer/railsapp/app/lib/event_tracker.rb
Zeitwerk@rails.main: constant VehiclesHelper loaded from file /Users/mikecarter/Developer/railsapp/app/helpers/vehicles_helper.rb
Zeitwerk@rails.main: constant FontAwesome::Rails::IconHelper loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails/icon_helper.rb
Zeitwerk@rails.main: constant DeviseHelper loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/helpers/devise_helper.rb
Zeitwerk@rails.main: constant SignUpWizardMethods loaded from file /Users/mikecarter/Developer/railsapp/app/controllers/concerns/sign_up_wizard_methods.rb
Zeitwerk@rails.main: constant ApplicationController loaded from file /Users/mikecarter/Developer/railsapp/app/controllers/application_controller.rb
Zeitwerk@rails.main: constant DeviseController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise_controller.rb
Zeitwerk@rails.main: constant Devise::SessionsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/sessions_controller.rb
Zeitwerk@rails.main: constant Devise::RegistrationsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/registrations_controller.rb
Zeitwerk@rails.main: constant Devise::ConfirmationsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/confirmations_controller.rb
Zeitwerk@rails.main: constant Devise::UnlocksController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/unlocks_controller.rb
Zeitwerk@rails.main: constant Devise::PasswordsController loaded from file /Users/mikecarter/Developer/railsapp/.bundle/ruby/2.7.0/gems/devise-4.8.0/app/controllers/devise/passwords_controller.rb
Zeitwerk@rails.main: module Api autovivified from directory /Users/mikecarter/Developer/railsapp/app/controllers/api
Zeitwerk@rails.main: autoload set for Api::AuthenticationsController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/api/authentications_controller.rb
Zeitwerk@rails.main: autoload set for Api::UsersController, to be loaded from /Users/mikecarter/Developer/railsapp/app/controllers/api/users_controller.rb
Zeitwerk@rails.main: autoload set for Api::Base, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/base.rb
Zeitwerk@rails.main: autoload set for Api::Expense, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/expense
Zeitwerk@rails.main: autoload set for Api::Person, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/person
Zeitwerk@rails.main: autoload set for Api::Notification, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/notification
Zeitwerk@rails.main: autoload set for Api::Bank, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/bank.rb
Zeitwerk@rails.main: autoload set for Api::Vehicle, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/vehicle.rb
Zeitwerk@rails.main: autoload set for Api::PhoneNumber, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/phone_number
Zeitwerk@rails.main: autoload set for Api::CommonLocation, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/common_location.rb
Zeitwerk@rails.main: autoload set for Api::Company, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/company.rb
Zeitwerk@rails.main: earlier autoload for Api::Person discarded, it is actually an explicit namespace defined in /Users/mikecarter/Developer/railsapp/app/models/api/person.rb
Zeitwerk@rails.main: autoload set for Api::Person, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/person.rb
Zeitwerk@rails.main: autoload set for Api::Trade, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/trade.rb
Zeitwerk@rails.main: autoload set for Api::Address, to be loaded from /Users/mikecarter/Developer/railsapp/app/models/api/address.rb
Zeitwerk@rails.main: autoload set for Api::Mod, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/mod
Zeitwerk@rails.main: autoload set for Api::Claim, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/claim
Zeitwerk@rails.main: autoload set for Api::Upload, to be autovivified from /Users/mikecarter/Developer/railsapp/app/models/api/upload
fxn commented 3 years ago

OK, let's sleep on it. Here's a minimal script that I believe captures your pattern (and finds the constants):

require "tmpdir"
require "fileutils"
require "zeitwerk"

Dir.mktmpdir do |dir|
  Dir.chdir(dir) do
    FileUtils.mkpath("api/vehicle")
    File.write("api/vehicle.rb", "module Api::Vehicle; end")
    File.write("api/vehicle/thing.rb", "module Api::Vehicle::Thing; end")

    loader = Zeitwerk::Loader.new
    loader.push_dir(".")
    loader.log!
    loader.setup

    p Api::Vehicle::Thing
  end
end
fxn commented 3 years ago

I have created a minimal Rails application using Rails 6.0.4.1, Ruby 2.7.3, Zeitwerk 2.4.2, and activeresource.

There is a dummy Api::UsersController. Under app/models/api we have base.rb, bank.rb, person.rb, and person/bank_account.rb. The class Api::Person::BankAccount has a belongs_to to Api::Bank:

class Api::Person::BankAccount < Api::Base
  belongs_to :bank, class_name: "Api::Bank"
end

as in one of the example above.

In this application, I can autoload any of the constants. For example, this is the log for Api::Person:

% bin/rails runner Api::Person
Zeitwerk@rails.main: autoload set for ApplicationController, to be loaded from /Users/fxn/tmp/issue_180/app/controllers/application_controller.rb
Zeitwerk@rails.main: autoload set for Api, to be autovivified from /Users/fxn/tmp/issue_180/app/controllers/api
Zeitwerk@rails.main: autoload set for ApplicationHelper, to be loaded from /Users/fxn/tmp/issue_180/app/helpers/application_helper.rb
Zeitwerk@rails.main: autoload set for ApplicationJob, to be loaded from /Users/fxn/tmp/issue_180/app/jobs/application_job.rb
Zeitwerk@rails.main: autoload set for ApplicationMailer, to be loaded from /Users/fxn/tmp/issue_180/app/mailers/application_mailer.rb
Zeitwerk@rails.main: autoload set for ApplicationRecord, to be loaded from /Users/fxn/tmp/issue_180/app/models/application_record.rb
Zeitwerk@rails.main: autoload set for ActionMailbox::BaseController, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/actionmailbox-6.0.4.1/app/controllers/action_mailbox/base_controller.rb
Zeitwerk@rails.main: autoload set for ActionMailbox::Ingresses, to be autovivified from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/actionmailbox-6.0.4.1/app/controllers/action_mailbox/ingresses
Zeitwerk@rails.main: autoload set for Rails::Conductor, to be autovivified from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/actionmailbox-6.0.4.1/app/controllers/rails/conductor
Zeitwerk@rails.main: autoload set for ActionMailbox::IncinerationJob, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/actionmailbox-6.0.4.1/app/jobs/action_mailbox/incineration_job.rb
Zeitwerk@rails.main: autoload set for ActionMailbox::RoutingJob, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/actionmailbox-6.0.4.1/app/jobs/action_mailbox/routing_job.rb
Zeitwerk@rails.main: autoload set for ActionMailbox::InboundEmail, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/actionmailbox-6.0.4.1/app/models/action_mailbox/inbound_email.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::DirectUploadsController, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/controllers/active_storage/direct_uploads_controller.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::BaseController, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/controllers/active_storage/base_controller.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::BlobsController, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/controllers/active_storage/blobs_controller.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::RepresentationsController, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/controllers/active_storage/representations_controller.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::DiskController, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/controllers/active_storage/disk_controller.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::SetCurrent, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/controllers/concerns/active_storage/set_current.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::SetBlob, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/controllers/concerns/active_storage/set_blob.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::BaseJob, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/jobs/active_storage/base_job.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::AnalyzeJob, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/jobs/active_storage/analyze_job.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::PurgeJob, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/jobs/active_storage/purge_job.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::Variant, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/models/active_storage/variant.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::Blob, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/models/active_storage/blob.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::Filename, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/models/active_storage/filename.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::Variation, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/models/active_storage/variation.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::Attachment, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/models/active_storage/attachment.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::Current, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/models/active_storage/current.rb
Zeitwerk@rails.main: autoload set for ActiveStorage::Preview, to be loaded from /Users/fxn/.frum/versions/2.7.3/lib/ruby/gems/2.7.0/gems/activestorage-6.0.4.1/app/models/active_storage/preview.rb
Zeitwerk@rails.main: module Api autovivified from directory /Users/fxn/tmp/issue_180/app/controllers/api
Zeitwerk@rails.main: autoload set for Api::UsersController, to be loaded from /Users/fxn/tmp/issue_180/app/controllers/api/users_controller.rb
Zeitwerk@rails.main: autoload set for Api::Base, to be loaded from /Users/fxn/tmp/issue_180/app/models/api/base.rb
Zeitwerk@rails.main: autoload set for Api::Person, to be autovivified from /Users/fxn/tmp/issue_180/app/models/api/person
Zeitwerk@rails.main: autoload set for Api::Bank, to be loaded from /Users/fxn/tmp/issue_180/app/models/api/bank.rb
Zeitwerk@rails.main: autoload set for Api::Person, to be loaded from /Users/fxn/tmp/issue_180/app/models/api/person.rb
Zeitwerk@rails.main: constant Api::Base loaded from file /Users/fxn/tmp/issue_180/app/models/api/base.rb
Zeitwerk@rails.main: autoload set for Api::Person::BankAccount, to be loaded from /Users/fxn/tmp/issue_180/app/models/api/person/bank_account.rb
Zeitwerk@rails.main: constant Api::Person loaded from file /Users/fxn/tmp/issue_180/app/models/api/person.rb

Comparing that minimal app with yours, do you spot any difference that brings your attention?

michaelcarter commented 3 years ago

Thanks for this! I've cloned your test application and compared outputs (with the file paths normalised). The output is identical to what you've pasted above, and I can also load all the models.

I'll continue fiddling with my app today to see what's stopping and let you know if I find anything.

michaelcarter commented 3 years ago

Ok, I think I've found the issue - The app I'm working on is pretty old, and has lots of messy initializers. One of them had this buried in it, which struck me immediately as unnecessary:

if !Rails.env.production?
  Dir.glob(Rails.root.join("app/models/**/*.rb")).each { |filename| require(filename) }
end

Removing this seems to have fixed all the issues I've been experiencing. I can now load all of the models, and all of my namespaces are inferred correctly.

I think this issue is now resolved. Thank you very much for all your help on this, you helped to save me a lot of frustration and wasted time.

fxn commented 3 years ago

Wow, that one was tricky!

I suspect some models were autoloaded during that eager loading, if not yet eager loaded and referenced at the top-level. That subset was unloaded when initialization finished (do you see this warning in the logs?). However, their require was executed anyway and therefore, their files ended up in $LOADED_FEATURES.

The unloaded ones got autoloads set by Zeitwerk later because the constants were unknown at setup time, as we saw in the logs in this issue. But the autoload calls, while triggered, didn't do anything because they issue a require, and $LOADED_FEAUTURES had the files. Therefore, the constant could not be autoloaded for real.

Pheeeewwwww!

My pleasure man! Thanks a lot for your persistence going step by step and chasing this down. Very happy we figured it out.

fxn commented 3 years ago

BTW, before the upgrade, the application was subject to this issue.