Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BUG?: Bump mini_racer from 0.4.0 to 0.5.0 getting compile errors #220

Closed
bf4 opened this issue Nov 11, 2021 · 17 comments
Closed

BUG?: Bump mini_racer from 0.4.0 to 0.5.0 getting compile errors #220

bf4 opened this issue Nov 11, 2021 · 17 comments

Comments

@bf4
Copy link

bf4 commented Nov 11, 2021

I see them in the GitHub Actions as well. Not sure exactly what caused it, but didn't see an existing issue so reporting

e.g. https://github.com/rubyjs/mini_racer/runs/4174922268?check_suite_focus=true

building against Ruby 2.7.2, heroku buildpack running on the heroku/heroku:18-build image and node 10.15.3

(
  export HEROKU_STACK="18"
  export ruby_version="2.7.2"
  echo "https://heroku-buildpack-ruby.s3.amazonaws.com/heroku-${HEROKU_STACK}/ruby-${ruby_version}.tgz"
  export node_version="10.15.3"
  echo "https://s3pository.heroku.com/node/v${node_version}/node-v${node_version}-linux-x64.tar.gz"

)

stacktrace from circleci

seems to be specific to libv8-node-15.14.0.0 -> libv8-node-16.10.0.0 requires I install node 16.13.0? (nope, that didn't work)

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:
/root/server/vendor/bundle/ruby/2.7.0/gems/mini_racer-0.5.0/ext/mini_racer_extension
/tmp/buildpack/ruby/ruby-2.7.2/bin/ruby -I
/tmp/buildpack/ruby/ruby-2.7.2/lib/ruby/2.7.0 -r
./siteconf20211111-3208-urf2xb.rb extconf.rb
checking for -lpthread... yes
creating Makefile

current directory:
/root/server/vendor/bundle/ruby/2.7.0/gems/mini_racer-0.5.0/ext/mini_racer_extension
make "DESTDIR=" clean

current directory:
/root/server/vendor/bundle/ruby/2.7.0/gems/mini_racer-0.5.0/ext/mini_racer_extension
make "DESTDIR="
compiling mini_racer_extension.cc
mini_racer_extension.cc: In function 'void* gvl_ruby_callback(void*)':
mini_racer_extension.cc:1255:92: warning: 'VALUE
ruby::backward::cxxanyargs::rb_rescue2(VALUE (*)(...), VALUE, VALUE (*)(...),
VALUE, ...)' is deprecated: Use of ANYARGS in this function is deprecated
[-Wdeprecated-declarations]
RUBY_METHOD_FUNC(rescue_callback), callback_data_value,
rb_eException, (VALUE)0);
^
In file included from
/tmp/buildpack/ruby/ruby-2.7.2/include/ruby-2.7.0/ruby/ruby.h:2863:0,
from
/tmp/buildpack/ruby/ruby-2.7.2/include/ruby-2.7.0/ruby.h:33,
                 from mini_racer_extension.cc:2:
/tmp/buildpack/ruby/ruby-2.7.2/include/ruby-2.7.0/ruby/backward/cxxanyargs.hpp:222:1:
note: declared here
 rb_rescue2(type *q, VALUE w, type *e, VALUE r, ...)
 ^~~~~~~~~~
linking shared-object mini_racer_extension.so
g++: error:
/root/server/vendor/bundle/ruby/2.7.0/gems/libv8-node-16.10.0.0-x86_64-linux-musl/vendor/v8/x86_64-linux/libv8/obj/libv8_monolith.a:
No such file or directory
Makefile:260: recipe for target 'mini_racer_extension.so' failed
make: *** [mini_racer_extension.so] Error 1

make failed, exit code 2

Gem files will remain installed in
/root/server/vendor/bundle/ruby/2.7.0/gems/mini_racer-0.5.0 for inspection.
Results logged to
/root/server/vendor/bundle/ruby/2.7.0/extensions/x86_64-linux/2.7.0/mini_racer-0.5.0/gem_make.out

An error occurred while installing mini_racer (0.5.0), and Bundler
cannot continue.
Make sure that `gem install mini_racer -v '0.5.0' --source
@tsugimoto
Copy link

You're Fetching and Installing libv8-node 16.10.0.0 (x86_64-linux-musl), so I suppose it's likely a duplicate of #218

@hmdne
Copy link

hmdne commented Nov 14, 2021

Also got this. But maybe I have something to add: it only happens on Ruby 2.7 and 2.6, not on 3.0.

See: https://github.com/opal/opal/runs/4202357932

phosei added a commit to phosei/wink that referenced this issue Nov 15, 2021
phosei added a commit to phosei/wink that referenced this issue Nov 15, 2021
@bf4
Copy link
Author

bf4 commented Nov 15, 2021

@tsugimoto I saw #218 but since it's a different error, I wasn't confident it was the same issue, even if the result is the same. Thanks for cross-linking though

@lloeki
Copy link
Collaborator

lloeki commented Nov 16, 2021

Definitely looks like the same root cause, you can see things being mixed up here:

/root/server/vendor/bundle/ruby/2.7.0/gems/libv8-node-16.10.0.0-x86_64-linux-musl/vendor/v8/x86_64-linux/libv8/obj/libv8_monolith.a:

Also got this. But maybe I have something to add: it only happens on Ruby 2.7 and 2.6, not on 3.0.

With each Ruby version the vendored rubygems+bundler get updated. Can you update your rubygems+bundler and see if the issue persists?

@hmdne
Copy link

hmdne commented Nov 17, 2021

Thank you @lloeki. We were locking an outdated bundler version in our GitHub Actions due to an earlier issue with libv8. See: opal/opal#2360

@dspaeth-lp
Copy link

dspaeth-lp commented Dec 13, 2021

@lloeki

I got this error too. Steps to reproduce:

> docker run -ti  -w /usr/src/app --entrypoint /bin/sh ruby:2.7.4-alpine 
> apk update && apk add --no-cache build-base 
> gem update --system; gem install bundler
> bundle init
> echo "gem 'mini_racer', '0.5.0'" >> Gemfile 
> bundle

=> g++: error: /usr/local/bundle/gems/libv8-node-16.10.0.0-aarch64-linux/vendor/v8/aarch64-linux-musl/libv8/obj/libv8_monolith.a: No such file or directory

but it has to be

/usr/local/bundle/gems/libv8-node-16.10.0.0-aarch64-linux/vendor/v8/aarch64-linux/libv8/obj/libv8_monolith.a

aarch64-linux-musl => aarch64-linux

0.4.0 works

> docker run -ti  -w /usr/src/app --entrypoint /bin/sh ruby:2.7.4-alpine 
> apk update && apk add --no-cache build-base 
> gem update --system; gem install bundler
> bundle init
> echo "gem 'mini_racer', '0.4.0'" >> Gemfile 
> bundle

Edit: for libv8-node-15.14.0.1 the created lib is /usr/local/bundle/gems/libv8-node-15.14.0.1-aarch64-linux-musl/vendor/v8/out.gn/libv8/obj/libv8_monolith.a

antw added a commit to quintel/etcentral that referenced this issue Dec 15, 2021
@lloeki
Copy link
Collaborator

lloeki commented Dec 20, 2021

I'm going to try creating a fat gem which includes both linux and linux-musl libs (which I don't quite like since it doubles the gem size, but even when I get to fix the root rubygems/bundler issue old versions of these would still be affected)

@rusterholz
Copy link

Is there a fix for this? This is still happening with v0.6.0 as well.

@ZimbiX
Copy link

ZimbiX commented Jan 12, 2022

I think this may actually be a bug with the libv8-node gem instead, since installing that directly picks the musl version:

➜ gem install libv8-node              
Successfully installed libv8-node-16.10.0.0-x86_64-linux-musl
1 gem installed

I'm on Arch, which I don't think uses musl, and I haven't noticed musl in a gem install log before. That's not right, is it?

@ZimbiX
Copy link

ZimbiX commented Jan 12, 2022

Sorry, I should have read more of the context: rubyjs/libv8-node#5, rubygems/rubygems#3174. The bug lies in rubygems. A fix was merged (rubygems/rubygems#4082), with a second rubygems PR outstanding (rubygems/rubygems#4488).

Despite that second PR not being merged/released yet, simply updating rubygems allows me to successfully install the gem now: 🎉

➜ gem update --system  
[...]

➜ gem --version        
3.3.4     

➜ gem install libv8-node              
Successfully installed libv8-node-16.10.0.0-x86_64-linux
1 gem installed

➜ gem install mini_racer              
Building native extensions. This could take a while...
Successfully installed mini_racer-0.6.1
1 gem installed

Edit: Bundler still uses the wrong version - hence the second PR

@wwahammy
Copy link

@lloeki thanks so much for all the work you've done here. Like I asked on the other repo, is there anything I can do to help fix this? It's not fair to put all this on you but I'm not sure on what needs to be done or how I can help.

@tisba
Copy link
Collaborator

tisba commented Jan 24, 2022

@bf4 can you check again against the latest mini_racer version? Also make sure to update rubygems and bundler.

A lot of related issues were solved by updating Rubygems and bundler and making sure the the right platforms are added to Gemfile.lock (via bundle lock --add-platform). From my understanding the outstanding rubygems issue/PR is about supporting multiple libc variants at the same time. So unless you need to support that in your projects, you should be good now.

@lloeki
Copy link
Collaborator

lloeki commented Jan 24, 2022

A lot of related issues were solved by updating Rubygems and bundler and making sure the the right platforms are added to Gemfile.lock (via bundle lock --add-platform)

Correct, but also, make sure to remove any platform-mismatched gem that may have been erroneously installed previously, otherwise bundler may be lazy and pick those up instead of hitting rubygems.org again. In some cases bundler was being stubborn and I've had to install the gem first with gem install, then proceed with bundle install.

From my understanding the outstanding rubygems issue/PR is about supporting multiple libc variants at the same time

It would indeed, but it should also helps in some corner cases e.g:

a) one created the lockfile on another platform than linux and did not run bundle lock --add-platform
b) one is on either linux (gnu) or linux-musl and the lockfile does not exist yet
c) a linux-musl gem on linux (gnu) cannot work, but could be picked up if it is previously installed for whatever reason

rgarner added a commit to UKGovernmentBEIS/beis-report-official-development-assistance that referenced this issue Jan 25, 2022
We have a dependabot/terraform PR problem: all the dependabot-triggered
builds fail. A propos of

rubyjs/mini_racer#220 (comment)

...update the rubygems and bundler that Docker (and hence CI) uses.

Try this on its own first, then try

`bundle lock --add-platform x86_64-linux`
dragon-dxw added a commit to UKGovernmentBEIS/beis-report-official-development-assistance that referenced this issue Jan 25, 2022
It was surprisingly complicated to get an unpinned mini_racer.
Mini_racer requires compilation, and this was failing on version
0.5.0 or higher.

rubyjs/mini_racer#220 appears relevant, and
gives hints about updating bundler and rubygems (we also updated the
hard-coded rake in the Dockerfile for good measure).

After recreating the Gemfile.lock from scratch (because bundler will
automatically install and run the version of bundler from the Gemfile.lock
file) it still didn't work, but told us to run `bundle lock --add-platform x86_64-linux`
which made it successfully work.

This is probably of use to other projects struggling to upgrade mini_racer.
dxw-rails-user pushed a commit to UKGovernmentBEIS/beis-report-official-development-assistance that referenced this issue Jan 25, 2022
It was surprisingly complicated to get an unpinned mini_racer.
Mini_racer requires compilation, and this was failing on version
0.5.0 or higher.

rubyjs/mini_racer#220 appears relevant, and
gives hints about updating bundler and rubygems (we also updated the
hard-coded rake in the Dockerfile for good measure).

After recreating the Gemfile.lock from scratch (because bundler will
automatically install and run the version of bundler from the Gemfile.lock
file) it still didn't work, but told us to run `bundle lock --add-platform x86_64-linux`
which made it successfully work.

This is probably of use to other projects struggling to upgrade mini_racer.
dragon-dxw added a commit to UKGovernmentBEIS/beis-report-official-development-assistance that referenced this issue Jan 25, 2022
It was surprisingly complicated to get an unpinned mini_racer.
Mini_racer requires compilation, and this was failing on version
0.5.0 or higher.

rubyjs/mini_racer#220 appears relevant, and
gives hints about updating bundler and rubygems (we also updated the
hard-coded rake in the Dockerfile for good measure).

After recreating the Gemfile.lock from scratch (because bundler will
automatically install and run the version of bundler from the Gemfile.lock
file) it still didn't work, but told us to run `bundle lock --add-platform x86_64-linux`
which made it successfully work.

This is probably of use to other projects struggling to upgrade mini_racer.
@schneems
Copy link

schneems commented Feb 7, 2022

This isn't a bug in mini racer or in Heroku. This is a bug in bundler.

Make sure you run:

bundle lock --add-platform x86_64-linux

Then add the results to git before you try to deploy again. Previously bundler would raise an error if you tried deploying to a linux target without the linux platform locked. It looks like there's been a regression and that error is no longer raised. If that error still existed it would prevent this problem from happening as it wouldn't even let you try to bundle install without the correct platform being listed.

@tisba
Copy link
Collaborator

tisba commented Feb 13, 2022

I've added a PR to add an installation troubleshooting section to the README: #240.

@tisba tisba closed this as completed Feb 13, 2022
@wanlinwang
Copy link

gem install mini_racer

Sorry, I should have read more of the context: rubyjs/libv8-node#5, rubygems/rubygems#3174. The bug lies in rubygems. A fix was merged (rubygems/rubygems#4082), with a second rubygems PR outstanding (rubygems/rubygems#4488).

Despite that second PR not being merged/released yet, simply updating rubygems allows me to successfully install the gem now: 🎉

➜ gem update --system  
[...]

➜ gem --version        
3.3.4     

➜ gem install libv8-node              
Successfully installed libv8-node-16.10.0.0-x86_64-linux
1 gem installed

➜ gem install mini_racer              
Building native extensions. This could take a while...
Successfully installed mini_racer-0.6.1
1 gem installed

Edit: Bundler still uses the wrong version - hence the second PR

Thank you. It works.

@evolve2k
Copy link

Workaround. Resolved by upgrading from ruby 2.7 to ruby 3.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests