【问题标题】:rails generate model : incompatible library version errorrails generate model:不兼容的库版本错误
【发布时间】:2016-09-03 11:42:32
【问题描述】:

我是 ruby​​ on rails 的新手,在尝试生成模型时遇到错误。 我在终端上写了这个命令:

rails generate model Book

我得到了这个错误:

/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>'

我尝试在我的 gemfile 中添加“therubyracer”然后运行,

bundle install

但即使这样也无济于事。
我的 Rails 版本是“Rails 5.0.0.1”。

Gemfile的内容如下:

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]

Gemfile.lock 的内容如下:

    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

【问题讨论】:

  • 您的错误消息表明您正在使用 rbenv 进行 ruby​​ 版本管理,但是您的 gem 是从 /var/lib/gems 而不是 /home/pearlstud/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems 加载的。也许问题就在这里。
  • 另一个可能的罪魁祸首是libffi,请检查您是否拥有最新版本。更新它,然后删除 ffi gem 然后重新安装。
  • @Loqman,你说得对“你的 gem 是从 /var/lib/gems 而不是 /home/pearlstud/.rbenv/versions/2.3.1/lib/ruby/2.3 加载的。 0/rubygem 可能问题就出在这里。”我使用 synaptic 删除了 /var/lib/gems 并使用 rbenv 重新安装了 rails 并且它起作用了,谢谢。

标签: mysql ruby-on-rails ruby rubygems


【解决方案1】:

尝试gem pristine --all然后rails生成模型书

【讨论】:

  • 我试过这个并没有解决问题。我实际上在生成模型和 ffi 时遇到了同样的问题
【解决方案2】:

此错误可能是系统中安装的库版本较旧。

首先使用gem 命令安装ffi

gem install ffi

然后做

bundle update

【讨论】:

  • 不,它没有帮助。我仍然遇到同样的错误。
  • 你能把你的GemfileGemfile.lock文件放在这里吗?这种情况是仅在这个项目中发生还是在您的所有项目中发生?
  • 对于 Jekyll 静态站点生成器,我遇到了同样的错误,首先 gem install 修复了它。
【解决方案3】:

我在不同的路径中安装了两个版本的 gem:

/var/lib/gems


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

于是我把“/var/lib/gems”和reinstalled rails using rbenv对应的gems包去掉,问题就解决了

【讨论】:

    【解决方案4】:

    我的问题及其解决方案都很简单:我未能在项目目录中实现 .ruby-gemset.ruby-version。 (也就是说我很久以前做过……但显然这些文件没有与我的项目一起备份,也没有被继承。)

    添加这些文件立即解决了问题:

    .ruby-gemset

    rails5
    

    .ruby 版本

    ruby-2.6.2 (or whatever your version is)
    

    仅此而已。我运行 rvm。请注意,您的 rails 版本和 ruby​​ 版本可能不同......但您可以在它们的目录中找到您的 gemset。您需要哪个非常明显。

    您可以通过以下方式找到您的 Ruby 版本:

    ruby --version
    

    这对我认识的每个人都没有帮助。但我希望它可以帮助某人。 (至少 rvm 用户)

    【讨论】:

      猜你喜欢
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2020-06-23
      • 2016-10-12
      • 2022-08-14
      • 2012-06-23
      相关资源
      最近更新 更多