无法加载此类文件 -- activerecord (LoadError)

cannot load such file -- activerecord (LoadError)

我正在尝试将一个非常旧的应用程序从 Rails 2.3.12 升级到 Rails 3.0.0(作为将其升级到 Rails 4 的起点)。我一直在慢慢地检查并修复升级后出现的任何问题,方法是移除旧的 gems 等。

我遇到了一个似乎无法确定或修复的问题。

我是运行宁Rails3,Ruby1.9.3

当我尝试 运行 rails 服务器时,出现以下错误:

    => Booting WEBrick
=> Rails 3.0.0 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require': cannot load such file -- activerecord (LoadError)
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `block in require'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `block in load_dependency'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:591:in `new_constants_in'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `load_dependency'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from /home/camillavk/Documents/Work/Saild/saild/vendor/plugins/acts_as_commentable/lib/commentable_methods.rb:1:in `<top (required)>'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `block in require'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `block in load_dependency'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:591:in `new_constants_in'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `load_dependency'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from /home/camillavk/Documents/Work/Saild/saild/vendor/plugins/acts_as_commentable/lib/acts_as_commentable.rb:1:in `<top (required)>'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `block in require'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `block in load_dependency'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:591:in `new_constants_in'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `load_dependency'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from /home/camillavk/Documents/Work/Saild/saild/vendor/plugins/acts_as_commentable/rails/init.rb:1:in `block in <class:Plugin>'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/plugin.rb:81:in `eval'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/plugin.rb:81:in `block in <class:Plugin>'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/initializable.rb:25:in `instance_exec'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/initializable.rb:25:in `run'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/initializable.rb:50:in `block in run_initializers'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/initializable.rb:49:in `each'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/initializable.rb:49:in `run_initializers'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/application.rb:134:in `initialize!'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/application.rb:77:in `method_missing'
        from /home/camillavk/Documents/Work/Saild/saild/config/environment.rb:7:in `<top (required)>'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `block in require'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `block in load_dependency'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:591:in `new_constants_in'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `load_dependency'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'
        from /home/camillavk/Documents/Work/Saild/saild/config.ru:3:in `block in <main>'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/rack-1.2.8/lib/rack/builder.rb:46:in `instance_eval'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/rack-1.2.8/lib/rack/builder.rb:46:in `initialize'
        from /home/camillavk/Documents/Work/Saild/saild/config.ru:1:in `new'
        from /home/camillavk/Documents/Work/Saild/saild/config.ru:1:in `<main>'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/rack-1.2.8/lib/rack/builder.rb:35:in `eval'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/rack-1.2.8/lib/rack/builder.rb:35:in `parse_file'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/rack-1.2.8/lib/rack/server.rb:162:in `app'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/rack-1.2.8/lib/rack/server.rb:253:in `wrapped_app'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/rack-1.2.8/lib/rack/server.rb:204:in `start'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/commands/server.rb:65:in `start'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/commands.rb:30:in `block in <top (required)>'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/commands.rb:27:in `tap'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/railties-3.0.0/lib/rails/commands.rb:27:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'

我的 Gemfile 如下所示:

source 'https://rubygems.org'

gem "rails", "3.0.0"

gem "airbrake"
gem "aws-s3"
gem "bj"
gem "bundler", "~> 1.0.0"
gem "calendar_date_select", "1.15"
gem "cancan", "1.2.0"
gem "carmen"
gem 'comma', '0.4.1'
gem 'exifr'
# factory_girl 1.2.4 wasn't working with Rails 3 - consider an upgrade to factory_girl_rails?
# gem "factory_girl", "1.2.4"
gem 'fastercsv'
gem "geokit"
gem "haml"
gem "hpricot"
gem 'hoptoad_notifier'
gem "jrails"
gem "libxml-ruby", "2.4.0"
gem "memcached", "~> 1.8.0"
#memcached no longer works?
gem 'dalli'
# Not sure why we have this if we're using SQLite3
gem "mysql2", "~> 0.2.6"
#TODO: changed by almazom
gem "rake", "0.8.4"
gem 'recurly'
gem "rdoc"
gem "rmagick"
gem "rspreedly"
gem "rubyzip"
gem 'sass'
#need to use simplecov when upgrading to ruby 2 as rcov doesn't work
gem "simplecov"
gem 'sqlite3'
# tmail no longer included in rails 3?
gem 'tmail'
gem "will_paginate", "2.3.16"
gem 'yaml_db'

group :development, :test do
  gem 'test-unit', '1.2.3'
  gem 'rspec', '1.3.2'
  gem 'rspec-rails', '~> 1.3.4'
end

group :test do
  gem 'capybara', '0.3.5'
  gem 'cucumber', '1.1.2'
  gem 'cucumber-rails', :git => "git://github.com/RKelln/cucumber-rails.git", :branch => "0.3.2-capybara-fix"
  gem 'database_cleaner'
end

有没有其他人在升级到 Rails 3 时遇到过这个问题?我在 Google 上找不到任何关于它的信息....

或者有人对我如何 find/fix 这个问题有建议吗?

非常感谢!

让我们看一下您的堆栈跟踪。堆栈跟踪从上到下读取。如果您有函数 A 调用函数 B 调用函数 C,发生错误时,堆栈跟踪显示

C
B
A

我们可以看到第一行都是来自Rails本身:

/home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require': cannot load such file -- activerecord (LoadError)
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `block in require'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `block in load_dependency'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:591:in `new_constants_in'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:225:in `load_dependency'
        from /home/camillavk/.rvm/gems/ruby-1.9.3-p551@rails3/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `require'

由于 Rails 本身通常不太可能是罪魁祸首,因此我们寻找来自其他地方的第一行 — 您自己的代码或第三方库。

下一行就是:

        from /home/camillavk/Documents/Work/Saild/saild/vendor/plugins/acts_as_commentable/lib/commentable_methods.rb:1:in `<top (required)>'

我们看到它的代码在 vendor/plugins,使它成为一个旧的 Rails 2.3 风格的插件。它们在 Rails 3 中被弃用,并在 Rails 4 中完全停止工作。它们被 "Gem plugins" 取代,通过您的 Gem 文件和 Bundler 添加,而不是 vendor/plugins.

所以 acts_as_commentable 是一个很好的罪魁祸首。 Github project 页面显示了一个专门针对 Rails 3 的版本,因此删除旧插件并将其替换为 Gem 可以很好地解决此问题。