shakacode/shakapacker

Shakapacker gem and node package versions do not match

s0rin opened this issue · 5 comments

s0rin commented

If, by mistake, both shakapacker and webpacker gems are installed, the following error will occur:

$ bundle exec rake shakapacker:compile
...
**ERROR** Shakapacker: Shakapacker gem and node package versions do not match
Detected: 7.0.3
     gem: 5.4.4
Ensure the installed version of the gem is the same as the version of
your installed node package.
Do not use >= or ~> in your Gemfile for shakapacker without a lockfile.
Do not use ^ or ~ in your package.json for shakapacker without a lockfile.

Expected behavior:

a better error message explanation (related to webpacker gem possible installation)

Actual behavior:

the error message is misleading (gem: 5.4.4 is the webpacker gem version, not shakapacker)

Small, reproducible repo:

Setup environment:

  • Ruby version: 3.2.2
  • Rails version: 6.1.7.6
  • Shakapacker version: 7.0.3

"Better" is not a bug, it's an "Enhancement."

Instead, Shakapacker should detect that webpacker is installed and raise an error during initialization, halting the program.

s0rin commented

yes, it is an "enhancement", but I couldn't change the label, "bug" or "feature request" only are available.

@s0rin I tried to reproduce this error, but I couldn't. And as per my review of the code base, I couldn't find any issue leading to such a situation.

I would appreciate your sharing a repo to reproduce the issue.

s0rin commented

The issue is always here, the error occurs when I have both gems in Gemfile:

...
gem 'webpacker'
gem 'shakapacker'
...

Here the whole output, maybe it helps:

$ bundle exec rake shakapacker:compile --trace
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/shakapacker-7.0.3/lib/shakapacker.rb:51: warning: already initialized constant Webpacker
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/webpacker-5.4.4/lib/webpacker.rb:6: warning: previous definition of Webpacker was here
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/webpacker-5.4.4/lib/webpacker/version.rb:3: warning: already initialized constant Shakapacker::VERSION
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/shakapacker-7.0.3/lib/shakapacker/version.rb:3: warning: previous definition of VERSION was here
** Invoke shakapacker:compile (first_time)
** Invoke shakapacker:verify_install (first_time)
** Invoke shakapacker:verify_config (first_time)
** Execute shakapacker:verify_config
** Invoke shakapacker:check_node (first_time)
** Execute shakapacker:check_node
** Invoke shakapacker:check_yarn (first_time)
** Execute shakapacker:check_yarn
** Invoke shakapacker:check_binstubs (first_time)
** Execute shakapacker:check_binstubs
** Execute shakapacker:verify_install
** Invoke environment (first_time)
** Execute environment
rake aborted!
**ERROR** Shakapacker: Shakapacker gem and node package versions do not match
Detected: 7.0.3
     gem: 5.4.4
Ensure the installed version of the gem is the same as the version of
your installed node package.
Do not use >= or ~> in your Gemfile for shakapacker without a lockfile.
Do not use ^ or ~ in your package.json for shakapacker without a lockfile.
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/shakapacker-7.0.3/lib/shakapacker/version_checker.rb:72:in `raise_differing_versions_warning'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/shakapacker-7.0.3/lib/shakapacker/version_checker.rb:52:in `raise_if_gem_and_node_package_versions_differ'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/shakapacker-7.0.3/lib/shakapacker/railtie.rb:13:in `block in <class:Engine>'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-6.1.7.6/lib/rails/initializable.rb:32:in `instance_exec'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-6.1.7.6/lib/rails/initializable.rb:32:in `run'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-6.1.7.6/lib/rails/initializable.rb:61:in `block in run_initializers'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/3.2.0/tsort.rb:228:in `block in tsort_each'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/3.2.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/3.2.0/tsort.rb:431:in `each_strongly_connected_component_from'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/3.2.0/tsort.rb:349:in `block in each_strongly_connected_component'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/3.2.0/tsort.rb:347:in `each'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/3.2.0/tsort.rb:347:in `call'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/3.2.0/tsort.rb:347:in `each_strongly_connected_component'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/3.2.0/tsort.rb:226:in `tsort_each'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/3.2.0/tsort.rb:205:in `tsort_each'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-6.1.7.6/lib/rails/initializable.rb:60:in `run_initializers'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-6.1.7.6/lib/rails/application.rb:391:in `initialize!'
/home/ror/Documents/AptanaStudio3Workspace/konsys/config/environment.rb:5:in `<main>'
<internal:/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:in `require'
<internal:/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:in `require'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/zeitwerk-2.6.11/lib/zeitwerk/kernel.rb:38:in `require'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/activesupport-6.1.7.6/lib/active_support/dependencies.rb:332:in `block in require'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/activesupport-6.1.7.6/lib/active_support/dependencies.rb:299:in `load_dependency'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/activesupport-6.1.7.6/lib/active_support/dependencies.rb:332:in `require'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-6.1.7.6/lib/rails/application.rb:367:in `require_environment!'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-6.1.7.6/lib/rails/application.rb:533:in `block in run_tasks_blocks'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `block in execute'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `each'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `execute'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `synchronize'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `invoke_with_call_chain'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:243:in `block in invoke_prerequisites'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:241:in `each'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:241:in `invoke_prerequisites'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:218:in `block in invoke_with_call_chain'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `synchronize'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `invoke_with_call_chain'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/task.rb:188:in `invoke'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/application.rb:160:in `invoke_task'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `each'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block in top_level'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/application.rb:125:in `run_with_threads'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/application.rb:110:in `top_level'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/application.rb:83:in `block in run'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/application.rb:186:in `standard_exception_handling'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/lib/rake/application.rb:80:in `run'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/home/ror/.rbenv/versions/3.2.2/bin/rake:25:in `load'
/home/ror/.rbenv/versions/3.2.2/bin/rake:25:in `<top (required)>'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler/cli/exec.rb:58:in `load'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler/cli/exec.rb:58:in `kernel_load'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler/cli/exec.rb:23:in `run'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler/cli.rb:492:in `exec'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler/cli.rb:34:in `dispatch'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler/cli.rb:28:in `start'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.19/exe/bundle:37:in `block in <top (required)>'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/home/ror/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.19/exe/bundle:29:in `<top (required)>'
/home/ror/.rbenv/versions/3.2.2/bin/bundle:25:in `load'
/home/ror/.rbenv/versions/3.2.2/bin/bundle:25:in `<main>'
Tasks: TOP => shakapacker:compile => environment

Everything if fine after removing the 'webpacker' gem.

Unfortunately I cannot share the repo. If you're not able to reproduce it, please close the issue.

I tried to make a repo with both gems and npm packages installed. I didn't get such an error.

I closed the issue since it is not reproducible. If you could make a simple repo to demonstrate the issue, please let us know.

Thanks for reporting.