Fix ActiveRecord dependency check for Zeitwerk eager loading#504
Open
trevorturk wants to merge 1 commit intocrmne:mainfrom
Open
Fix ActiveRecord dependency check for Zeitwerk eager loading#504trevorturk wants to merge 1 commit intocrmne:mainfrom
trevorturk wants to merge 1 commit intocrmne:mainfrom
Conversation
Wrap all ActiveRecord module definitions with `if defined?(ActiveRecord::Base)` to prevent Zeitwerk errors when ActiveRecord is not present. - Wrap active_record/*.rb files with ActiveRecord::Base check - Add active_record directory to Zeitwerk ignore list - Load method modules before acts_as in railtie initializer - Remove duplicate require of acts_as from lib/ruby_llm.rb Fixes Zeitwerk::NameError when eager loading without ActiveRecord. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Contributor
Author
|
This one is much easier to view with Hide Whitespace enabled: https://github.com/crmne/ruby_llm/pull/504/files?w=1 |
trevorturk
added a commit
to trevorturk/ruby_llm
that referenced
this pull request
Nov 18, 2025
Adds validation that Zeitwerk can eager load all files without errors. This catches autoloading issues like inflector bugs and missing conditional checks before they reach production. - Added check after linter step for fast fail - Runs on all Ruby/Rails matrix combinations - ~2 second check prevents production crashes ## Blocked This PR depends on crmne#504 (ActiveRecord dependency fix) to pass. Without it, the eager loading check fails with NameError. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
trevorturk
added a commit
to trevorturk/ruby_llm-mcp
that referenced
this pull request
Nov 18, 2025
Adds a validation step that runs Zeitwerk::Loader.eager_load_all after dependency installation to catch autoloading issues early in the CI pipeline. This check helps prevent production crashes by detecting: - Inflector configuration errors - Constant definition issues - Missing conditional checks for optional dependencies The check runs quickly (~2 seconds) before the test matrix, providing rapid feedback on structural issues. Note: This check currently fails due to upstream ruby_llm ActiveRecord dependency issues. See: - crmne/ruby_llm#504 - crmne/ruby_llm#505 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This was referenced Nov 18, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Zeitwerk::NameErrorwhen eager loading without ActiveRecord presentlib/ruby_llm/active_record/*.rbfiles withif defined?(ActiveRecord::Base)checkactive_recorddirectory to Zeitwerk ignore listDetails
This PR ensures all ActiveRecord integration files only define their modules when ActiveRecord is available, following the pattern for conditional module loading.
Changes:
acts_as.rb,acts_as_legacy.rb,chat_methods.rb,message_methods.rb, andmodel_methods.rbwithif defined?(ActiveRecord::Base)loader.ignore("#{__dir__}/ruby_llm/active_record")to prevent Zeitwerk from auto-loading these conditional fileslib/ruby_llm.rb(now only in railtie)Testing:
🤖 Generated with Claude Code