Rails应用部署至Heroku失败:SQLite3依赖加载错误求助
解决Heroku部署Rails应用时的sqlite3 Gem加载错误
这个问题其实很常见——Heroku不支持SQLite3作为生产环境数据库,原因有两个:一是SQLite是基于文件的数据库,Heroku的dyno(运行容器)重启后所有本地文件都会被重置,数据会直接丢失;二是Heroku的环境默认没有安装SQLite的系统依赖,就算你在Gemfile里强制添加sqlite3,部署时也会触发加载失败的报错。
下面是具体的修复步骤:
1. 调整Gemfile配置
把sqlite3限制在开发和测试环境,同时为生产环境添加Heroku官方推荐的PostgreSQL对应的pg gem:
# Gemfile source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.3.0' # 注意保持和你报错里的Ruby版本一致 # 仅在开发、测试环境使用sqlite3 group :development, :test do gem 'sqlite3', '~> 1.4' # 选择和你的Rails 5.1.4兼容的版本即可 end # 生产环境切换为PostgreSQL group :production do gem 'pg' end # 其他你的Rails依赖... gem 'rails', '~> 5.1.4' # ...
2. 更新依赖并锁定版本
在本地终端运行命令,确保只安装开发/测试环境的依赖,同时更新Gemfile.lock(这个文件Heroku会严格校验):
bundle install --without production
3. 提交代码修改
把调整后的Gemfile和Gemfile.lock提交到Git仓库:
git add Gemfile Gemfile.lock git commit -m "Switch production database to PostgreSQL (fix Heroku sqlite3 error)"
4. 重新部署到Heroku
推送更新后的代码到Heroku远程仓库:
git push heroku main # 如果你的默认分支是master,就替换成git push heroku master
5. 执行生产环境数据库迁移
部署完成后,别忘了在Heroku上运行数据库迁移,确保生产环境的数据库结构正确:
heroku run rails db:migrate
这样操作后,Heroku就会在生产环境自动使用PostgreSQL,不会再尝试加载sqlite3,问题应该就能顺利解决了。
内容的提问来源于stack exchange,提问作者goodjobbin85
相关产品推荐
相关产品推荐

