13aal 13aal - 6 months ago 91
Ruby Question

Restclient throwing unusual exception

While trying to use the following gems:

require 'nokogiri'
require 'restclient'
require 'mechanize'


I'm getting the following error:

C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- ffi_c (LoadError)
from C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from C:/Ruby23/lib/ruby/gems/2.3.0/gems/ffi-1.9.10-x86-mingw32/lib/ffi.rb:6:in `rescue in <top (required)>'
from C:/Ruby23/lib/ruby/gems/2.3.0/gems/ffi-1.9.10-x86-mingw32/lib/ffi.rb:3:in `<top (required)>'
from C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from C:/Ruby23/lib/ruby/gems/2.3.0/gems/rest-client-1.8.0-x86-mingw32/lib/restclient/windows/root_certs.rb:2:in `<top (required)>'
from C:/Ruby23/lib/ruby/gems/2.3.0/gems/rest-client-1.8.0-x86-mingw32/lib/restclient/windows.rb:7:in `require_relative'
from C:/Ruby23/lib/ruby/gems/2.3.0/gems/rest-client-1.8.0-x86-mingw32/lib/restclient/windows.rb:7:in `<top (required)>'
from C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from C:/Ruby23/lib/ruby/gems/2.3.0/gems/rest-client-1.8.0-x86-mingw32/lib/restclient.rb:16:in `<top (required)>'
from C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:133:in `require'
from C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:133:in `rescue in require'
from C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
from parse_docs.rb:5:in `<main>'


Since the last thing on this list is line 5, which is
require 'restclient'
I'm guessing it has something to do with that? However I've attempted to do the following:


  • Since
    restclient
    is deprecated and has moved to
    rest-client
    , I tried using
    rest-client
    however that doesn't work and produces the same error.

  • I've also attempted to
    require 'rubygems'
    but that when I run the program, it will not allow me to continue and produces the same error.

  • So I completely took out
    restclient
    , this is how I got the idea that
    restclient
    is causing the problem , because without it there, the program can run successfully.

  • So I though what would happen if I rolled back on
    ffi
    ? So I installed the
    ffi
    version that is needed to run
    restclient
    However, that didn't help either.

  • Updated all my gems, still throwing the same error..

  • Downloaded the latest version on
    ffi
    , nothing changes, except now I havea new version of
    ffi
    on my system, that's still throwing an error when being used with
    restclient



Why is
restclient
producing the
ffi
error, I've never had this happen to me before. Is
rest-client
deprecated? Or is there a simple solution that I'm not catching onto? I've researched this, and nobody has had this problem (while using
restclient
) however there is a ton of people who have gotten this error while using other gems. For example see also here. It might also be worth mentioning that I'm running Windows 7.

Answer

So I found an answer to this, it had to do with Holger Just's answer with a minor tweak, I'm pretty sure my case is pretty unique because my company likes to hide behind a VPN script. So here's how I did it:

  • First I needed to install the previous version of ffi using the platform flag: gem install ffi --pre --platform=ruby
  • Next I had to update the gem: gem update --all (I think that's the correct syntax for the flag)

That got ffi working.

Comments