Installing the eventmachine gem in WSL
I ran into this issue a few times and kept forgetting the fix for it which is why I am
writing a quick post on it. Generally when adding ruby gems, we add them to our Gemfile
and just throw bundle install
at it to get everything configured. However I kept running into a strange issue when attempting to get event machine installed for a gem I was writing myself.
The installation steps are actually quite simple if you run into this error.
The error
When trying to install eventmachine (1.2.7) on WSL, I kept getting this stack error:
user@DESKTOP:/mnt/f/code/project$ bundle install
Fetching gem metadata from https://rubygems.org/......
Using rake 10.5.0
Fetching eventmachine 1.2.7
Installing eventmachine 1.2.7 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /home/user/.rvm/gems/ruby-2.7.1/gems/eventmachine-1.2.7/ext
/home/user/.rvm/rubies/ruby-2.7.1/bin/ruby -I /home/user/.rvm/rubies/ruby-2.7.1/lib/ruby/2.7.0 -r
./siteconf20201031-507-no2sha.rb extconf.rb --with-ssl-dir\=c:/OpenSS
-----
Cannot find OpenSSL include path c/include:/OpenSS/include
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/home/user/.rvm/rubies/ruby-2.7.1/bin/$(RUBY_BASE_NAME)
--with-ssl-dir
--with-ssl-include
--without-ssl-include=${ssl-dir}/include
--with-ssl-lib
--without-ssl-lib=${ssl-dir}/lib
To see why this extension failed to compile, please check the mkmf.log which can be found here:
/home/user/.rvm/gems/ruby-2.7.1/extensions/x86_64-linux/2.7.0/eventmachine-1.2.7/mkmf.log
extconf failed, exit code 1
Gem files will remain installed in /home/user/.rvm/gems/ruby-2.7.1/gems/eventmachine-1.2.7 for inspection.
Results logged to /home/user/.rvm/gems/ruby-2.7.1/extensions/x86_64-linux/2.7.0/eventmachine-1.2.7/gem_make.out
An error occurred while installing eventmachine (1.2.7), and Bundler cannot continue.
Make sure that `gem install eventmachine -v '1.2.7' --source 'https://rubygems.org/'` succeeds before bundling.
In Gemfile:
project was resolved to 0.1.0, which depends on
action_cable_client was resolved to 3.1.0, which depends on
websocket-eventmachine-client was resolved to 1.3.0, which depends on
websocket-eventmachine-base was resolved to 1.2.0, which depends on
eventmachine
The fix!
To bypass this stack, the solution is to first install eventmachine locally before running bundle install
.
The command is simply:
gem install eventmachine --pre
After this, you can successfully run bundle install
to install the rest of your dependencies.