Bundle install fails to install libxml-ruby
I manage to fix this with the help of a colleague, if anybody else encounter this problem:
gem install libxml-ruby -v '2.9.0' -- --use-system-libraries --with-xml2-dir=/usr/local/Cellar/libxml2/2.9.8/include/libxml2/libxml/ --with-xml2-config=/usr/bin/xml2-config
Replace '2.9.0' with the libxml version that you need!
nokogiri gem installation error
Finally, the problem was caused by nokogiri itself by shipping it's own libxml2 that's incompatible with some systems.
So to install nokogiri I had to tell it that it should use the system libraries.
I installed it manually by:
gem install nokogiri -v 1.6.2.1 -- --use-system-libraries
And it worked well. Other answers didn't solve it.
How can I find out why a gem bundle has locked a gem at a specific version?
Turns out just running bundle update thrift
will show you what is locking the version:
$ bundle update thrift
Fetching source index for http://rubygems.org/
Bundler could not find compatible versions for gem "thrift":
In Gemfile:
evernote depends on
thrift (~> 0.5.0)
thrift (0.6.0)
Mac user and getting WARNING: Nokogiri was built against LibXML version 2.7.8, but has dynamically loaded 2.7.3
I just spent the better part of the morning working through this warning. This fix is for people using Mac OS Lion. The fix above using
bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
is for Snow Leopard with libxml2 installed via MacPorts.
With Lion, libxml2 is loaded as part of the bootstrap process. Regardless of which libxml2 Nokogiri is pointing to, the Lion system default library for libxml2 will be used at runtime. Lion uses libxml2.2.7.3 found in /usr
(not /usr/local
).
As mentioned many other places, one can just ignore the warning. If, like me, the warning drives you crazy, you can do this:
bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local
Interestingly, if you type nokogiri -v
at the command line you will get the opposite warning:
WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8
This suggests there is more to how libxml2 is being loaded, with Ruby and Rails using the system loaded libxml2 and the command line using libxml2 from the environment path. Anyway, this silences the error for me.
I’ll say it again – this is only for Lion. The previous fix will work for Snow Leopard.
This is the end of the answer. Stop reading here.
OK, you didn’t stop reading... well...
NOT RECOMMENDED!!!!!!
You have been warned. You can verify that Mac OSX is loading the libxml2 library in its bootstrap by disabling libxml2 found in /usr/lib
. Do something like copying all versions of libxml2*.dylib
to libxml2*.dylib.old
(on my machine this was libxml2.2.7.3
, libxml2.2
and libxml2
).
After you have done this, running Nokogiri will not produce any errors. That is because it can’t find the loaded libxml2 and will now follow the environment path, eventually finding libxml2.2.7.8
in /opt/local
.
BUT you won’t be able to copy the old libxml files back. This is because the OS needs the libxml2 that was loaded in the bootstrap.
Powering off and powering on again will brick your machine. The login screen will hang and hang and hang. Power off and power on again in single-user mode (hold Command-S while rebooting). You can watch the bootstrap occur. Low and behold, it throws an error that it can’t load libxml2 and then stops working.
Power off and power on again. This time boot into recovery mode (either hold Command-R or hold Option and then select the recovery disk). In recovery mode open the terminal (utilities/terminal
). Mount /usr/lib
on your HD (try /Volumes/Macintosh\ HD/usr/lib
) and copy the libxml2 files back. Reboot and all will be fine.
making the xar utility use expat instead of libxml2
The current version (1.5.2 as of this writing) requires libxml.
The word expat
doesn't even occur in the source code.
Related Topics
Why Does My Recursive Method from Helper Not Return Every Value
Why Can't I Change the Value of Self
Expressing Conditional Haml Possibly with Ternary Operator
System New Line Separator in Ruby
How to Escape the Vertical Bar When Doing Command Line with Ruby
Bundler::Rubyversionmismatch: Your Ruby Version Is 1.9.3, But Your Gemfile Specified 2.0.0
How to Combination/Permutation in Ruby
How to Turn Off Bigint Primary Keys in Rails 5.1
Jekyll Plugin Not Work on Github
Initializing a Hash with Empty Array Unexpected Behaviour
Generate Full Url to JavaScript in Rails (Similar to JavaScript_Path, But Url)
Ruby: Wait for All Threads Completed Using Join and Threadswait.All_Waits - What the Difference
Rmagick How to Convert Image in Memory
How to Create Automatically a Instance of Every Class in a Directory