Skip to content

Commit bea93f1

Browse files
committed
Add temporary debug info to diagnose path duplication issue
1 parent 1b0db42 commit bea93f1

File tree

3 files changed

+123
-3
lines changed

3 files changed

+123
-3
lines changed

lib/react_on_rails/doctor.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,21 +313,31 @@ def determine_server_bundle_path
313313
source_entry_path = Shakapacker.config.source_entry_path.to_s
314314
server_bundle_filename = get_server_bundle_filename
315315

316+
# Debug info - remove after fixing
317+
checker.add_info("🔍 Debug - Raw source_path: #{source_path}")
318+
checker.add_info("🔍 Debug - Raw source_entry_path: #{source_entry_path}")
319+
checker.add_info("🔍 Debug - Rails root (Dir.pwd): #{Dir.pwd}")
320+
316321
# If source_path is absolute, make it relative to current directory
317322
if source_path.start_with?("/")
318323
# Convert absolute path to relative by removing the Rails root
319324
rails_root = Dir.pwd
320325
if source_path.start_with?(rails_root)
321326
source_path = source_path.sub("#{rails_root}/", "")
327+
checker.add_info("🔍 Debug - Converted to relative: #{source_path}")
322328
else
323329
# If it's not under Rails root, just use the basename
324330
source_path = File.basename(source_path)
331+
checker.add_info("🔍 Debug - Using basename: #{source_path}")
325332
end
326333
end
327334

328-
File.join(source_path, source_entry_path, server_bundle_filename)
329-
rescue LoadError, NameError, StandardError
335+
final_path = File.join(source_path, source_entry_path, server_bundle_filename)
336+
checker.add_info("🔍 Debug - Final path: #{final_path}")
337+
final_path
338+
rescue LoadError, NameError, StandardError => e
330339
# Fallback to default paths if Shakapacker is not available or configured
340+
checker.add_info("🔍 Debug - Shakapacker error: #{e.message}")
331341
server_bundle_filename = get_server_bundle_filename
332342
"app/javascript/packs/#{server_bundle_filename}"
333343
end

lib/react_on_rails/system_checker.rb

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ def check_react_on_rails_packages
146146
check_react_on_rails_gem
147147
check_react_on_rails_npm_package
148148
check_package_version_sync
149+
check_gemfile_version_patterns
149150
end
150151

151152
def check_react_on_rails_gem
@@ -200,13 +201,14 @@ def check_package_version_sync
200201

201202
if clean_npm_version == gem_version
202203
add_success("✅ React on Rails gem and NPM package versions match (#{gem_version})")
204+
check_version_patterns(npm_version, gem_version)
203205
else
204206
add_warning(<<~MSG.strip)
205207
⚠️ Version mismatch detected:
206208
• Gem version: #{gem_version}
207209
• NPM version: #{npm_version}
208210
209-
Consider updating to matching versions for best compatibility.
211+
Consider updating to exact, fixed matching versions of gem and npm package for best compatibility.
210212
MSG
211213
end
212214
rescue JSON::ParserError
@@ -374,6 +376,50 @@ def report_dependency_status(required_deps, missing_deps, package_json)
374376
MSG
375377
end
376378

379+
def check_version_patterns(npm_version, gem_version)
380+
# Check for version range patterns in package.json
381+
if npm_version.match(/^[\^~]/)
382+
pattern_type = npm_version[0] == '^' ? 'caret (^)' : 'tilde (~)'
383+
add_warning(<<~MSG.strip)
384+
⚠️ NPM package uses #{pattern_type} version pattern: #{npm_version}
385+
386+
While versions match, consider using exact version "#{gem_version}" in package.json
387+
for guaranteed compatibility with the React on Rails gem.
388+
MSG
389+
end
390+
end
391+
392+
def check_gemfile_version_patterns
393+
gemfile_path = ENV["BUNDLE_GEMFILE"] || "Gemfile"
394+
return unless File.exist?(gemfile_path)
395+
396+
begin
397+
gemfile_content = File.read(gemfile_path)
398+
react_on_rails_line = gemfile_content.lines.find { |line| line.match(/^\s*gem\s+['"]react_on_rails['"]/) }
399+
400+
return unless react_on_rails_line
401+
402+
# Check for version patterns in Gemfile
403+
if react_on_rails_line.match(/['"][~^]/)
404+
add_warning(<<~MSG.strip)
405+
⚠️ Gemfile uses version pattern for react_on_rails gem.
406+
407+
Consider using exact version in Gemfile for guaranteed compatibility:
408+
gem 'react_on_rails', '#{ReactOnRails::VERSION}'
409+
MSG
410+
elsif react_on_rails_line.match(/['>]=/)
411+
add_warning(<<~MSG.strip)
412+
⚠️ Gemfile uses version range (>=) for react_on_rails gem.
413+
414+
Consider using exact version in Gemfile for guaranteed compatibility:
415+
gem 'react_on_rails', '#{ReactOnRails::VERSION}'
416+
MSG
417+
end
418+
rescue StandardError
419+
# Ignore errors reading Gemfile
420+
end
421+
end
422+
377423
def report_dependency_versions(package_json)
378424
all_deps = package_json["dependencies"]&.merge(package_json["devDependencies"] || {}) || {}
379425

spec/lib/react_on_rails/system_checker_spec.rb

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,70 @@
192192
end
193193
end
194194

195+
describe "#check_version_patterns" do
196+
it "warns about caret version patterns" do
197+
checker.send(:check_version_patterns, "^16.0.0", "16.0.0")
198+
expect(checker.warnings?).to be true
199+
expect(checker.messages.last[:content]).to include("caret (^) version pattern")
200+
end
201+
202+
it "warns about tilde version patterns" do
203+
checker.send(:check_version_patterns, "~16.0.0", "16.0.0")
204+
expect(checker.warnings?).to be true
205+
expect(checker.messages.last[:content]).to include("tilde (~) version pattern")
206+
end
207+
208+
it "does not warn about exact versions" do
209+
initial_message_count = checker.messages.count
210+
checker.send(:check_version_patterns, "16.0.0", "16.0.0")
211+
expect(checker.messages.count).to eq(initial_message_count)
212+
end
213+
end
214+
215+
describe "#check_gemfile_version_patterns" do
216+
context "when Gemfile has version patterns" do
217+
let(:gemfile_content) do
218+
<<~GEMFILE
219+
gem 'rails', '~> 7.0'
220+
gem 'react_on_rails', '~> 16.0'
221+
gem 'other_gem'
222+
GEMFILE
223+
end
224+
225+
before do
226+
allow(File).to receive(:exist?).with("Gemfile").and_return(true)
227+
allow(File).to receive(:read).with("Gemfile").and_return(gemfile_content)
228+
stub_const("ReactOnRails::VERSION", "16.0.0")
229+
end
230+
231+
it "warns about tilde version patterns" do
232+
checker.send(:check_gemfile_version_patterns)
233+
expect(checker.warnings?).to be true
234+
expect(checker.messages.last[:content]).to include("Gemfile uses version pattern")
235+
end
236+
end
237+
238+
context "when Gemfile has exact versions" do
239+
let(:gemfile_content) do
240+
<<~GEMFILE
241+
gem 'rails', '7.0.0'
242+
gem 'react_on_rails', '16.0.0'
243+
GEMFILE
244+
end
245+
246+
before do
247+
allow(File).to receive(:exist?).with("Gemfile").and_return(true)
248+
allow(File).to receive(:read).with("Gemfile").and_return(gemfile_content)
249+
end
250+
251+
it "does not warn about exact versions" do
252+
initial_message_count = checker.messages.count
253+
checker.send(:check_gemfile_version_patterns)
254+
expect(checker.messages.count).to eq(initial_message_count)
255+
end
256+
end
257+
end
258+
195259
describe "#check_react_on_rails_npm_package" do
196260
context "when package.json exists with react-on-rails" do
197261
let(:package_json_content) do

0 commit comments

Comments
 (0)