从Cloud9部署Rails应用到Heroku遇SQLite3依赖错误求助
解决Rails部署Heroku时的sqlite3 Gem加载错误
这个问题我之前碰到过好多次,核心原因是Heroku不支持SQLite3作为生产环境数据库——SQLite是文件型数据库,Heroku的dyno容器是临时的,重启后数据会丢失,而且Heroku的运行环境也没有适配SQLite的配置。咱们一步步来解决:
1. 调整Gemfile的数据库依赖
把SQLite3限制在开发和测试环境,同时为生产环境添加PostgreSQL的gem(Heroku官方推荐的数据库):
# Gemfile group :development, :test do gem 'sqlite3', '~> 1.4' # 可以指定合适的版本号 end group :production do gem 'pg' # PostgreSQL的Ruby驱动 end
2. 更新依赖并提交代码
在本地运行命令更新Gemfile.lock(不用安装生产环境的pg,避免本地环境冲突):
bundle install --without production
然后把修改后的Gemfile和Gemfile.lock提交到Git:
git add Gemfile Gemfile.lock git commit -m "Switch production database to PostgreSQL"
3. 确认database.yml的生产环境配置
Rails默认的production配置已经适配Heroku的PostgreSQL,你可以检查config/database.yml的production部分,确保是这样的:
production: adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> url: <%= ENV['DATABASE_URL'] %>
Heroku会自动为你的应用设置DATABASE_URL环境变量,这个配置会自动读取它,不用手动填数据库地址。
4. 重新部署并执行迁移
把代码推送到Heroku:
git push heroku main # 如果你的主分支是master就用git push heroku master
然后再执行数据库迁移:
heroku run rake db:migrate
这样应该就能顺利完成迁移了,以后部署生产环境就不会再碰到sqlite3的加载错误啦。
内容的提问来源于stack exchange,提问作者user9409047
相关产品推荐
相关产品推荐

