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

sass-embedded gem extension install fails with rake require error on Windows with JRuby 9.4.2.0 #7717

Closed
chadlwilson opened this issue Mar 9, 2023 · 10 comments
Milestone

Comments

@chadlwilson
Copy link
Contributor

chadlwilson commented Mar 9, 2023

Environment Information

Provide at least:

  • JRuby version jruby 9.4.2.0 (3.1.0) 2023-03-08 90d2913fda OpenJDK 64-Bit Server VM 17.0.6+10-LTS on 17.0.6+10-LTS [aarch64-mswin32] (similar on [x86_64-mswin32])
  • Operating system and platform Windows 2022 Server Core/Windows 11

Other relevant info:

  • Default pre-packaged bundler 2.3.25
  • sass-embedded 1.58.3

Expected Behavior

Can install sass-embedded gem and run its "native extensions" install as before.

Actual Behavior

A gem install of sass-embedded on Windows seems to now fail with the below error. This is working on JRuby 9.4.1.0.

sass-embedded uses a "native extension" to dynamically download appropriate native sass binaries for Windows to run within JRuby via this Rakefile.

There seems to be some issue when requiring rake? I can't see obviously from https://www.jruby.org/2023/03/08/jruby-9-4-2-0.html what might have changed to cause this - there might be issue on our side of course.

[667346055, #<Thread:0x61a87366@main run>, #<LoadError: no such file to load --
rake>, ["org/jruby/RubyKernel.java:1057:in `require'",
"uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85:in
`require'",
"C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake:25:in
`<main>'"]]
[667346055, #<Thread:0x61a87366@main run>, #<RuntimeError: CRITICAL:
RUBYGEMS_ACTIVATION_MONITOR.owned?: before false -> after true>,

bundle install log (run via Jruby)

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

current directory:
C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/sass-embedded-1.58.3/ext/sass
C:/gocd/server/scripts/jruby.bat
-Iuri:classloader:/META-INF/jruby.home/lib/ruby/stdlib -rrubygems
C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake
RUBYARCHDIR\=C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/extensions/universal-java-17/3.1.0/sass-embedded-1.58.3
RUBYLIBDIR\=C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/extensions/universal-java-17/3.1.0/sass-embedded-1.58.3
[667346055, #<Thread:0x61a87366@main run>, #<LoadError: no such file to load --
rake>, ["org/jruby/RubyKernel.java:1057:in `require'",
"uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85:in
`require'",
"C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake:25:in
`<main>'"]]
[667346055, #<Thread:0x61a87366@main run>, #<RuntimeError: CRITICAL:
RUBYGEMS_ACTIVATION_MONITOR.owned?: before false -> after true>,
["uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:167:in
`require'",
"C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/lib/rake.rb:29:in
`<main>'", "org/jruby/RubyKernel.java:1057:in `require'",
"uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:160:in
`require'",
"C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake:25:in
`<main>'"]]
RuntimeError: CRITICAL: RUBYGEMS_ACTIVATION_MONITOR.owned?: before false ->
after true
require at
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:167
<main> at
C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake:25
RuntimeError: CRITICAL: RUBYGEMS_ACTIVATION_MONITOR.owned?: before false ->
after true
require at
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:167
<main> at
C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/lib/rake.rb:29
  require at org/jruby/RubyKernel.java:1057
require at
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:160
<main> at
C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake:25
LoadError: no such file to load -- rake
  require at org/jruby/RubyKernel.java:1057
require at
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85
<main> at
C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake:25

rake failed, exit code 1

Gem files will remain installed in
C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/sass-embedded-1.58.3
for inspection.
Results logged to
C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/extensions/universal-java-17/3.1.0/sass-embedded-1.58.3/gem_make.out

uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/ext/builder.rb:102:in
`run'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/ext/rake_builder.rb:28:in
`build'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/ext/builder.rb:171:in
`build_extension'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/ext/builder.rb:205:in
`block in build_extensions'
  org/jruby/RubyArray.java:1987:in `each'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/ext/builder.rb:202:in
`build_extensions'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/installer.rb:843:in
`build_extensions'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/bundler/rubygems_gem_installer.rb:72:in
`build_extensions'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/bundler/rubygems_gem_installer.rb:28:in
`install'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/bundler/source/rubygems.rb:207:in
`install'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/bundler/installer/gem_installer.rb:54:in
`install'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/bundler/installer/gem_installer.rb:16:in
`install_from_spec'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/bundler/installer/parallel_installer.rb:186:in
`do_install'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/bundler/installer/parallel_installer.rb:177:in
`block in worker_pool'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/bundler/worker.rb:62:in
`apply_func'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/bundler/worker.rb:57:in
`block in process_queue'
  org/jruby/RubyKernel.java:1586:in `loop'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/bundler/worker.rb:54:in
`process_queue'
uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/bundler/worker.rb:91:in
`block in create_threads'

An error occurred while installing sass-embedded (1.58.3), and Bundler cannot
continue.

In Gemfile:
  sassc-embedded was resolved to 1.54.0, which depends on
    sass-embedded

gem_make.out log (similar to above)

current directory: C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/sass-embedded-1.58.3/ext/sass
C:/gocd/server/scripts/jruby.bat -Iuri:classloader:/META-INF/jruby.home/lib/ruby/stdlib -rrubygems C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake RUBYARCHDIR\=C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/extensions/universal-java-17/3.1.0/sass-embedded-1.58.3 RUBYLIBDIR\=C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/extensions/universal-java-17/3.1.0/sass-embedded-1.58.3
[667346055, #<Thread:0x61a87366@main run>, #<LoadError: no such file to load -- rake>, ["org/jruby/RubyKernel.java:1057:in `require'", "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85:in `require'", "C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake:25:in `<main>'"]]
[667346055, #<Thread:0x61a87366@main run>, #<RuntimeError: CRITICAL: RUBYGEMS_ACTIVATION_MONITOR.owned?: before false -> after true>, ["uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:167:in `require'", "C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/lib/rake.rb:29:in `<main>'", "org/jruby/RubyKernel.java:1057:in `require'", "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:160:in `require'", "C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake:25:in `<main>'"]]
RuntimeError: CRITICAL: RUBYGEMS_ACTIVATION_MONITOR.owned?: before false -> after true
  require at uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:167
   <main> at C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake:25
RuntimeError: CRITICAL: RUBYGEMS_ACTIVATION_MONITOR.owned?: before false -> after true
  require at uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:167
   <main> at C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/lib/rake.rb:29
  require at org/jruby/RubyKernel.java:1057
  require at uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:160
   <main> at C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake:25
LoadError: no such file to load -- rake
  require at org/jruby/RubyKernel.java:1057
  require at uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85
   <main> at C:/gocd/server/src/main/webapp/WEB-INF/rails/gems/jruby/3.1.0/gems/rake-13.0.6/exe/rake:25

rake failed, exit code 1

JRuby is being launched with the below as C:/gocd/server/scripts/jruby.bat (don't ask me about the history here 😅)

@echo off

set "GEM_HOME=C:\gocd\server\src\main\webapp\WEB-INF\rails\gems\jruby\3.1.0"
set "GEM_PATH=C:\gocd\server\src\main\webapp\WEB-INF\rails\gems\jruby\3.1.0"
set "RUBY=C:/gocd/server/scripts/jruby.bat"
rem add jruby and rubygem binstubs to PATH
set "PATH=C:\gocd\server\scripts;C:\gocd\server\src\main\webapp\WEB-INF\rails\gems\jruby\3.1.0\bin;%PATH%"

"C:\Program Files (Arm)\Microsoft\jdk-17.0.6.10-hotspot\bin\java.exe" ^
  "-XX:+TieredCompilation" ^
  "-XX:TieredStopAtLevel=1" ^
  "-Xss2048k" ^
  "-client" ^
  "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED" ^
  "--add-opens=java.base/java.io=ALL-UNNAMED" ^
  "-Djruby.compile.mode=OFF" ^
  "-Djruby.compile.invokedynamic=false" ^
  "-Djruby.home=uri:classloader://META-INF/jruby.home" ^
  "-Djdk.net.URLClassPath.disableClassPathURLCheck=true" ^
  -cp ^
  "C:\Users\Chad Wilson\.gradle\caches\modules-2\files-2.1\org.jruby\jruby-complete\9.4.2.0\28ee1571fc1250938422eecf6a8f801a44906c7b\jruby-complete-9.4.2.0.jar;C:\gocd\server\target\libs\server-23.1.0-16074-pathing.jar" ^
  org.jruby.Main ^
  %*
@headius
Copy link
Member

headius commented Mar 11, 2023

Wow this is weird. Investigating.

@headius
Copy link
Member

headius commented Mar 11, 2023

I searched for the error a bit and most explanations point to a bad installed gem or bad gem home or something. I'm trying to reproduce on my end; just installing sass-embedded should do it?

@headius
Copy link
Member

headius commented Mar 11, 2023

Doesn't seem like I can reproduce on my current system because it is arm64-based and there's no sass-embedded for arm64.

@ahorek
Copy link
Contributor

ahorek commented Mar 11, 2023

sass-embedded works ok on Windows. This has something to do with load paths. He's using the jruby-complete package and rake is bundled inside of it.

perhaps this change? #7683 it's just a hard guess...
jruby.bat -Iuri:classloader:/META-INF/jruby.home/lib/ruby/stdlib

@headius
Copy link
Member

headius commented Mar 12, 2023

@ahorek Ah that is a good candidate. Maybe @enebo can take another look at this Monday. It seems like it may be messing up the classloader paths.

@enebo
Copy link
Member

enebo commented Mar 13, 2023

@ahorek ouch. I think I see the problem. Blindly using java.io.File will probably see uri:classloader as a relative file and then make a very strange absolute path.

@enebo enebo added this to the JRuby 9.4.3.0 milestone Mar 13, 2023
@enebo enebo closed this as completed in c667fd6 Mar 16, 2023
enebo added a commit that referenced this issue Mar 16, 2023
Fixes #7717. sass-embedded gem extension install fails with jruby-com…
@enebo
Copy link
Member

enebo commented Mar 16, 2023

@chadlwilson I did not have exact same env to test this but the test I did was trying and install using --user-install. This will still fail but it fails in the same way as 9.4.1.0 did so I think the damage had been undone.

You are likely using the windows installer but you should be able to install our nightly (zip) to verify things are fixed for you: https://www.jruby.org/nightly (note: nightly will mean testing tomorrow since I just merged it).

@chadlwilson
Copy link
Contributor Author

Thanks @enebo - we run by the jruby complete jar not an installer so I'll figure out how to drop that in and sanity test.

@headius
Copy link
Member

headius commented Mar 17, 2023

The complete jar is built and published to the Sonatype snapshots repository every night too!

@chadlwilson
Copy link
Contributor Author

chadlwilson commented Mar 17, 2023

Thanks folks, looks fine to me now on Windows 11 with jruby-complete-9.4.3.0-20230317.063755-11. Now I'm past the Gem installs, am running the full test suite on Windows Server 2022, but assume it'll be fine 👍 (edit: it was fine!)

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

4 participants