部署含SQLite3 gem的Rails应用到Heroku失败,求解决方案
解决Heroku部署Rails应用时的sqlite3依赖问题
这个问题我之前也碰到过!Heroku完全不支持sqlite3作为生产环境的数据库——毕竟sqlite是文件型数据库,Heroku的dyno(运行容器)是临时的,每次重启数据都会丢失,而且多实例运行的时候还没法共享数据。所以咱们得把生产环境的数据库换成Heroku原生支持的PostgreSQL,具体步骤如下:
1. 调整Gemfile的数据库依赖
打开你的Gemfile,把sqlite3放到development和test环境组里,同时给生产环境添加pg(PostgreSQL的Ruby驱动)。修改后的Gemfile应该长这样:
source 'https://rubygems.org' gem 'rails', '4.2.5' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.1.0' # Authentication Gem... # 开发和测试环境继续用sqlite3,方便本地调试 group :development, :test do gem 'sqlite3' end # 生产环境用PostgreSQL适配Heroku group :production do gem 'pg' end
2. 更新Gemfile.lock并安装依赖
在本地终端运行这条命令,它会跳过生产环境的依赖安装(不用在本地装pg),同时更新Gemfile.lock文件:
bundle install --without production
3. 提交修改到Git仓库
把调整后的Gemfile和Gemfile.lock提交到Git:
git add Gemfile Gemfile.lock git commit -m "切换生产环境数据库为PostgreSQL以适配Heroku部署"
4. 重新推送到Heroku
现在再把代码推送到Heroku就不会报错了:
git push heroku main
(如果你的默认分支是master,就把main换成master)
5. 可选:运行生产环境数据库迁移
如果你的应用有数据库迁移文件,推完代码后记得在Heroku上执行迁移:
heroku run rails db:migrate
这样操作完,你的Rails应用应该就能顺利部署到Heroku啦!
内容的提问来源于stack exchange,提问作者user9409047
相关产品推荐
相关产品推荐

