mhm
mhm

Reputation: 194

rails generate model : incompatible library version error

I am new to ruby on rails and getting errors when trying to generate models. I wrote this command on terminal :

rails generate model Book

and I got this error:

/var/lib/gems/2.3.0/gems/ffi-1.9.14/lib/ffi.rb:6:in `require': incompatible library version - /var/lib/gems/2.3.0/gems/ffi-1.9.14/lib/ffi_c.so (LoadError)
from /var/lib/gems/2.3.0/gems/ffi-1.9.14/lib/ffi.rb:6:in `rescue in <top (required)>'
from /var/lib/gems/2.3.0/gems/ffi-1.9.14/lib/ffi.rb:3:in `<top (required)>'
from /var/lib/gems/2.3.0/gems/rb-inotify-0.9.7/lib/rb-inotify/native.rb:1:in `require'
from /var/lib/gems/2.3.0/gems/rb-inotify-0.9.7/lib/rb-inotify/native.rb:1:in `<top (required)>'
from /var/lib/gems/2.3.0/gems/rb-inotify-0.9.7/lib/rb-inotify.rb:1:in `require'
from /var/lib/gems/2.3.0/gems/rb-inotify-0.9.7/lib/rb-inotify.rb:1:in `<top (required)>'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/adapter/linux.rb:30:in `require'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/adapter/linux.rb:30:in `_configure'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/adapter/base.rb:45:in `block in configure'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/adapter/base.rb:40:in `each'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/adapter/base.rb:40:in `configure'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/adapter/base.rb:63:in `start'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/backend.rb:28:in `start'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/listener.rb:67:in `block in <class:Listener>'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/fsm.rb:120:in `instance_eval'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/fsm.rb:120:in `call'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/fsm.rb:91:in `transition_with_callbacks!'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/fsm.rb:57:in `transition'
from /var/lib/gems/2.3.0/gems/listen-3.0.8/lib/listen/listener.rb:90:in `start'
from /var/lib/gems/2.3.0/gems/spring-watcher-listen-2.0.0/lib/spring/watcher/listen.rb:27:in `start'
from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:70:in `start_watcher'
from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:79:in `preload'
from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:143:in `serve'
from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:131:in `block in run'
from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in `loop'
from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in `run'
from /var/lib/gems/2.3.0/gems/spring-1.7.2/lib/spring/application/boot.rb:19:in `<top (required)>'
from /home/pearlstud/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/pearlstud/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from -e:1:in `<main>'

I tried adding "therubyracer" in my gemfile and then running,

bundle install

but even this doesn't help.
My rails version is "Rails 5.0.0.1".

The content of the Gemfile is as follows:

source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use Puma as the app server
gem 'puma', '~> 3.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes navigating your web application faster. Read more:    https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
gem 'therubyracer'
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platform: :mri
end

group :development do
# Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
gem 'web-console'
gem 'listen', '~> 3.0.5'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

The contents of Gemfile.lock is as follows:

    remote: https://rubygems.org/
  specs:
    actioncable (5.0.0.1)
      actionpack (= 5.0.0.1)
      nio4r (~> 1.2)
      websocket-driver (~> 0.6.1)
    actionmailer (5.0.0.1)
      actionpack (= 5.0.0.1)
      actionview (= 5.0.0.1)
      activejob (= 5.0.0.1)
      mail (~> 2.5, >= 2.5.4)
      rails-dom-testing (~> 2.0)
    actionpack (5.0.0.1)
      actionview (= 5.0.0.1)
      activesupport (= 5.0.0.1)
      rack (~> 2.0)
      rack-test (~> 0.6.3)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.0.2)
    actionview (5.0.0.1)
      activesupport (= 5.0.0.1)
      builder (~> 3.1)
      erubis (~> 2.7.0)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.0.2)
    activejob (5.0.0.1)
      activesupport (= 5.0.0.1)
      globalid (>= 0.3.6)
    activemodel (5.0.0.1)
      activesupport (= 5.0.0.1)
    activerecord (5.0.0.1)
      activemodel (= 5.0.0.1)
      activesupport (= 5.0.0.1)
      arel (~> 7.0)
    activesupport (5.0.0.1)
      concurrent-ruby (~> 1.0, >= 1.0.2)
      i18n (~> 0.7)
      minitest (~> 5.1)
      tzinfo (~> 1.1)
    arel (7.1.1)
    builder (3.2.2)
    byebug (9.0.5)
    coffee-rails (4.2.1)
      coffee-script (>= 2.2.0)
      railties (>= 4.0.0, < 5.2.x)
    coffee-script (2.4.1)
      coffee-script-source
      execjs
    coffee-script-source (1.10.0)
    concurrent-ruby (1.0.2)
    debug_inspector (0.0.2)
    erubis (2.7.0)
    execjs (2.7.0)
    ffi (1.9.14)
    globalid (0.3.7)
      activesupport (>= 4.1.0)
    i18n (0.7.0)
    jbuilder (2.6.0)
      activesupport (>= 3.0.0, < 5.1)
      multi_json (~> 1.2)
    jquery-rails (4.2.1)
      rails-dom-testing (>= 1, < 3)
      railties (>= 4.2.0)
      thor (>= 0.14, < 2.0)
    libv8 (3.16.14.15)
    listen (3.0.8)
      rb-fsevent (~> 0.9, >= 0.9.4)
      rb-inotify (~> 0.9, >= 0.9.7)
    loofah (2.0.3)
      nokogiri (>= 1.5.9)
    mail (2.6.4)
      mime-types (>= 1.16, < 4)
    method_source (0.8.2)
    mime-types (3.1)
      mime-types-data (~> 3.2015)
    mime-types-data (3.2016.0521)
    mini_portile2 (2.1.0)
    minitest (5.9.0)
    multi_json (1.12.1)
    nio4r (1.2.1)
    nokogiri (1.6.8)
      mini_portile2 (~> 2.1.0)
      pkg-config (~> 1.1.7)
    pkg-config (1.1.7)
    puma (3.6.0)
    rack (2.0.1)
    rack-test (0.6.3)
      rack (>= 1.0)
    rails (5.0.0.1)
      actioncable (= 5.0.0.1)
      actionmailer (= 5.0.0.1)
      actionpack (= 5.0.0.1)
      actionview (= 5.0.0.1)
      activejob (= 5.0.0.1)
      activemodel (= 5.0.0.1)
      activerecord (= 5.0.0.1)
      activesupport (= 5.0.0.1)
      bundler (>= 1.3.0, < 2.0)
      railties (= 5.0.0.1)
      sprockets-rails (>= 2.0.0)
    rails-dom-testing (2.0.1)
      activesupport (>= 4.2.0, < 6.0)
      nokogiri (~> 1.6.0)
    rails-html-sanitizer (1.0.3)
      loofah (~> 2.0)
    railties (5.0.0.1)
      actionpack (= 5.0.0.1)
      activesupport (= 5.0.0.1)
      method_source
      rake (>= 0.8.7)
      thor (>= 0.18.1, < 2.0)
    rake (11.2.2)
    rb-fsevent (0.9.7)
    rb-inotify (0.9.7)
      ffi (>= 0.5.0)
    ref (2.0.0)
    sass (3.4.22)
    sass-rails (5.0.6)
      railties (>= 4.0.0, < 6)
      sass (~> 3.1)
      sprockets (>= 2.8, < 4.0)
      sprockets-rails (>= 2.0, < 4.0)
      tilt (>= 1.1, < 3)
    spring (1.7.2)
    spring-watcher-listen (2.0.0)
      listen (>= 2.7, < 4.0)
      spring (~> 1.2)
    sprockets (3.7.0)
      concurrent-ruby (~> 1.0)
      rack (> 1, < 3)
    sprockets-rails (3.2.0)
      actionpack (>= 4.0)
      activesupport (>= 4.0)
      sprockets (>= 3.0.0)
    sqlite3 (1.3.11)
    therubyracer (0.12.2)
      libv8 (~> 3.16.14.0)
      ref
    thor (0.19.1)
    thread_safe (0.3.5)
    tilt (2.0.5)
    turbolinks (5.0.1)
      turbolinks-source (~> 5)
    turbolinks-source (5.0.0)
    tzinfo (1.2.2)
      thread_safe (~> 0.1)
    uglifier (3.0.2)
      execjs (>= 0.3.0, < 3)
    web-console (3.3.1)
      actionview (>= 5.0)
      activemodel (>= 5.0)
      debug_inspector
      railties (>= 5.0)
    websocket-driver (0.6.4)
      websocket-extensions (>= 0.1.0)
    websocket-extensions (0.1.2)

PLATFORMS
  ruby

DEPENDENCIES
  byebug
  coffee-rails (~> 4.2)
  jbuilder (~> 2.5)
  jquery-rails
  listen (~> 3.0.5)
  puma (~> 3.0)
  rails (~> 5.0.0, >= 5.0.0.1)
  sass-rails (~> 5.0)
  spring
  spring-watcher-listen (~> 2.0.0)
  sqlite3
  therubyracer
  turbolinks (~> 5)
  tzinfo-data
  uglifier (>= 1.3.0)
  web-console

BUNDLED WITH
   1.12.5

Upvotes: 2

Views: 5689

Answers (6)

Alex
Alex

Reputation: 425

I've been getting this a lot with recent versions of Bundler and Ruby. For reasons, they have been using ~/.bundle and ~/.gems for gems, and so different Ruby versions end up trying to load the same compiled versions.

I just had this very problem, and in my case the path it was loading the gem was pointing to ffi in ~/.bundle. I tried to gem install ffi and it worked, but it was installed somewhere else, so despite having the ffi gem in ~/.gem, bundler continued trying to load the broken on living in ~/.bundle.

My solution was to delete the one in ~/.bundle so bundler could reinstall it:

rm -rf ~/.bundle

It's far from ideal, because it means the conflicts will eventually return, but it solves the problem at hand in the short-term. I'm still investigating how to separate gems per Ruby version, which isn't happening automatically for some reason.

Upvotes: 0

Khaled AbuShqear
Khaled AbuShqear

Reputation: 1398

I had the same issue with gem "date", reinstalling it worked for me, try this:

gem uninstall ffi
gem install ffi

Upvotes: 0

mystic cola
mystic cola

Reputation: 1643

Both my problem and its solution were simple: I'd failed to implement a .ruby-gemset and a .ruby-version in the project directory. (Which is to say I did a long time ago... but apparently these files weren't backed up with my project an were not carried over.)

Adding these files solved the problem instantly:

.ruby-gemset

rails5

.ruby-version

ruby-2.6.2 (or whatever your version is)

It took nothing more than that. I run rvm. Mind you your rails version and ruby version are likely different... but you can find your gemsets in their directory. It will be EXTREMELY obvious which you you need.

You can find your Ruby version with:

ruby --version

This won't help everyone I know. But I'm hoping it helps SOMEONE. (At least rvm users)

Upvotes: 0

mhm
mhm

Reputation: 194

I had two versions of gem installed in different paths:

/var/lib/gems

and

~/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems

so I removed the gems package corresponding to "/var/lib/gems" and reinstalled rails using rbenv and the problem was solved

Upvotes: 1

Ravi Mariya
Ravi Mariya

Reputation: 1230

try gem pristine --all then rails generate model Book

Upvotes: 3

Loqman
Loqman

Reputation: 1590

This error is probably caused by an older version of the library installed in the system.

First install ffi with gem command:

gem install ffi

and then do

bundle update

Upvotes: 3

Related Questions