部署Rails应用至Heroku时遇Gem::LoadError错误求助
解决Heroku部署Rails应用时的sqlite3 Gem::LoadError问题
核心排查方向及解决步骤
1. 确认production环境数据库配置正确
- 打开
config/database.yml,必须确保production区块使用postgresql适配器,不能残留sqlite3相关配置,示例配置如下:production: adapter: postgresql url: <%= ENV['DATABASE_URL'] %> pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 - 排查项目所有代码/配置文件,确保没有在production环境下主动引用sqlite3的逻辑,比如初始化脚本、模型中的硬编码调用,找到后删除或替换为适配PostgreSQL的代码。
2. 修正assets预编译的环境依赖
Heroku部署时默认执行rails assets:precompile,若预编译过程意外依赖了development/test环境的gem(比如sqlite3),会触发加载错误,可通过两种方式处理:
- 方式一:本地预编译后推送
- 本地执行production环境的assets预编译:
RAILS_ENV=production bundle exec rails assets:precompile - 将生成的
public/assets目录加入git:git add public/assets - 重新推送代码到Heroku:
git push heroku main
- 本地执行production环境的assets预编译:
- 方式二:确保预编译依赖正确
对于Rails 5+版本,确认Gemfile中没有在production组意外引入dev/test相关gem,同时保证sprockets等assets相关gem在production组中。
3. 重新同步production环境依赖
- 本地仅安装production环境所需gem:
bundle install --without development test - 提交更新后的
Gemfile.lock到git:git add Gemfile.lock - 重新部署到Heroku:
git push heroku main
4. 验证Heroku的环境变量设置
- 检查Heroku上的RAILS环境:
heroku config:get RAILS_ENV - 若返回值不是
production,手动设置环境变量:heroku config:set RAILS_ENV=production
内容的提问来源于stack exchange,提问作者OBay
相关产品推荐
相关产品推荐

