Rails本地服务器启动报错:sqlite3 gem版本冲突问题求助
Rails启动时sqlite3版本冲突问题解决
环境信息
- Ruby版本:
3.2.0 - Rails版本:
7.1.3.4 - 已安装sqlite3 gem版本:
2.0.2 - 错误提示要求版本:
sqlite3 ~>1.4
错误现象
执行启动命令 rails s 后出现版本冲突错误,核心错误信息:
ERROR LoadError: Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? can't activate sqlite3 (~> 1.4), already activated sqlite3-2.0.2-x86_64-linux-gnu. Make sure all dependencies are added to Gemfile.
完整错误日志:
rails s => Booting WEBrick => Rails 7.1.3.4 application starting in development http://localhost:3000 => Run `bin/rails server --help` for more startup options [2024-06-05 14:04:59] INFO WEBrick 1.8.1 [2024-06-05 14:04:59] INFO ruby 3.2.0 (2022-12-25) [x86_64-linux] [2024-06-05 14:04:59] INFO WEBrick::HTTPServer#start: pid=380133 port=3000 127.0.0.1 - - [05/Jun/2024:14:05:02 -03] "GET / HTTP/1.1" 200 0 - -> / [2024-06-05 14:05:02] ERROR LoadError: Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? can't activate sqlite3 (~> 1.4), already activated sqlite3-2.0.2-x86_64-linux-gnu. Make sure all dependencies are added to Gemfile. /home/elton/.rbenv/versions/3.2.0/lib/ruby/site_ruby/3.2.0/bundler/rubygems_integration.rb:237:in `block (2 levels) in replace_gem' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activerecord-7.1.3.4/lib/active_record/connection_adapters/sqlite3_adapter.rb:14:in `<top (required)>' <internal:/home/elton/.rbenv/versions/3.2.0/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' <internal:/home/elton/.rbenv/versions/3.2.0/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/zeitwerk-2.6.15/lib/zeitwerk/kernel.rb:34:in `require' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activerecord-7.1.3.4/lib/active_record/connection_adapters/abstract/connection_handler.rb:333:in `resolve_pool_config' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activerecord-7.1.3.4/lib/active_record/connection_adapters/abstract/connection_handler.rb:134:in `establish_connection' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activerecord-7.1.3.4/lib/active_record/connection_handling.rb:53:in `establish_connection' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activerecord-7.1.3.4/lib/active_record/railtie.rb:304:in `block (2 levels) in <class:Railtie>' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/lazy_load_hooks.rb:97:in `class_eval' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/lazy_load_hooks.rb:97:in `block in execute_hook' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/lazy_load_hooks.rb:87:in `with_execution_control' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/lazy_load_hooks.rb:92:in `execute_hook' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/lazy_load_hooks.rb:78:in `block in run_load_hooks' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/lazy_load_hooks.rb:77:in `each' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/lazy_load_hooks.rb:77:in `run_load_hooks' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activerecord-7.1.3.4/lib/active_record/base.rb:338:in `<module:ActiveRecord>' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activerecord-7.1.3.4/lib/active_record/base.rb:15:in `<top (required)>' <internal:/home/elton/.rbenv/versions/3.2.0/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' <internal:/home/elton/.rbenv/versions/3.2.0/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/zeitwerk-2.6.15/lib/zeitwerk/kernel.rb:34:in `require' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activerecord-7.1.3.4/lib/active_record/query_cache.rb:29:in `run' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/execution_wrapper.rb:29:in `before' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/callbacks.rb:426:in `block in make_lambda' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/callbacks.rb:202:in `block (2 levels) in halting' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/callbacks.rb:707:in `block (2 levels) in default_terminator' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/callbacks.rb:706:in `catch' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/callbacks.rb:706:in `block in default_terminator' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/callbacks.rb:203:in `block in halting' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/callbacks.rb:598:in `block in invoke_before' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/callbacks.rb:598:in `each' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/callbacks.rb:598:in `invoke_before' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/callbacks.rb:109:in `run_callbacks' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/execution_wrapper.rb:129:in `run' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/execution_wrapper.rb:125:in `run!' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/execution_wrapper.rb:78:in `block in run!' <internal:kernel>:90:in `tap' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/activesupport-7.1.3.4/lib/active_support/execution_wrapper.rb:75:in `run!' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/actionpack-7.1.3.4/lib/action_dispatch/middleware/executor.rb:12:in `call' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/actionpack-7.1.3.4/lib/action_dispatch/middleware/static.rb:25:in `call' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/bundler/gems/rack-8d7c029ed113/lib/rack/sendfile.rb:114:in `call' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/actionpack-7.1.3.4/lib/action_dispatch/middleware/host_authorization.rb:141:in `call' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/railties-7.1.3.4/lib/rails/engine.rb:536:in `call' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/rack-cors-2.0.2/lib/rack/cors.rb:102:in `call' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/rackup-2.1.0/lib/rackup/handler/webrick.rb:111:in `service' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/webrick-1.8.1/lib/webrick/httpserver.rb:140:in `service' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/webrick-1.8.1/lib/webrick/httpserver.rb:96:in `run' /home/elton/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/webrick-1.8.1/lib/webrick/server.rb:310:in `block in start_thread'
当前Gemfile配置
Gemfile中指定了sqlite3版本为~> 2.0, >= 2.0.2,但仍报错:
source 'https://rubygems.org' ruby '3.2.0' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 7.1' gem 'rack-cors' gem 'mailgun-ruby', '~>1.2.5' gem 'rack-timeout' gem 'bcrypt', '3.1.12' group :development, :test do # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'colorize' gem 'spring-watcher-listen', '~> 2.0.0' gem 'bundler-audit' gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] # Display performance information such as SQL time and flame graphs for each request in your browser. # Can be configured to work on production as well see: https://github.com/MiniProfiler/rack-mini-profiler/blob/master/README.md gem 'listen', '~> 3.3' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data' gem "importmap-rails", "~> 1.1" gem "hotwire-rails", "~> 0.1.3" gem "tailwindcss-rails", "~> 2.6" gem 'rack', git: 'https://github.com/rack/rack' gem "rackup", "~> 2.1" # Use Puma as the app server gem "passenger", "~> 6.0" gem "recaptcha", "~> 5.16" gem 'sqlite3', '~> 2.0', '>= 2.0.2'
解决步骤
问题根源是Rails 7.1.3.4的Active Record适配器依赖sqlite3 ~>1.4版本,当前安装的2.0.2版本与之不兼容。按以下步骤统一版本:
- 修改Gemfile中的sqlite3版本
将Gemfile里的sqlite3行替换为适配Rails 7.1的版本:
gem 'sqlite3', '~> 1.4'
- 执行bundle安装命令
在终端运行:
bundle install
该命令会安装指定的1.4系列版本,并更新Gemfile.lock文件。
- 清理旧版本gem(可选)
如果仍存在版本冲突,可手动卸载旧版本:
gem uninstall sqlite3 -v 2.0.2
- 重启服务器
重新启动Rails服务器:
rails s
通过以上操作,即可确保使用单一的、符合Rails要求的sqlite3版本,解决启动报错问题。
内容的提问来源于stack exchange,提问作者Elton Galeti
相关产品推荐
相关产品推荐

