Rails 5部署Heroku遇Gem::LoadError错误,求技术协助
解决Heroku部署时的PostgreSQL Gem加载错误
我来帮你排查这个部署问题!从你的日志来看,核心错误是预编译资产时无法加载pg gem,虽然你的Gemfile里已经包含了它,但结合你的配置,主要有两个关键问题需要修正:
1. 修正Gemfile的分组配置
首先,rails_12factor是专门为Rails生产环境设计的gem,不需要放在development和test组里;另外可以保留pg的版本声明(确保兼容ActiveRecord 5.1.4即可)。修改后的Gemfile片段如下:
group :development, :test do gem 'pg', '~> 1.0.0' # gem 'sqlite3' # 保持注释状态 gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'capybara', '~> 2.13' gem 'selenium-webdriver' end group :production do gem 'pg', '~> 1.0.0' gem 'rails_12factor' # 只保留在生产组 end group :development do gem 'web-console', '>= 3.3.0' end
2. 修正Production环境的数据库配置
Heroku会自动为你创建PostgreSQL数据库,并通过DATABASE_URL环境变量提供连接信息,你不需要硬编码username和password(这些是你本地的数据库信息,在Heroku上无效)。修改config/database.yml的production部分:
production: adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> url: <%= ENV['DATABASE_URL'] %> # 使用Heroku提供的环境变量
3. 避免预编译资产时初始化数据库(可选但推荐)
在config/environments/production.rb中添加或修改以下配置,让资产预编译过程不加载ActiveRecord,从根源避免数据库相关的加载错误:
config.assets.initialize_on_precompile = false
4. 重新部署到Heroku
完成以上修改后,执行以下命令更新代码并部署:
bundle install --without development test git add Gemfile Gemfile.lock config/database.yml config/environments/production.rb git commit -m "Fix Heroku deployment: correct pg and database config" git push heroku master
这些修改的作用:
- 确保pg gem在生产环境被正确安装和加载
- 让Heroku使用自动配置的数据库连接信息,避免本地配置导致的连接失败
- 减少资产预编译过程中的不必要依赖,避免加载错误
内容的提问来源于stack exchange,提问作者Abdul Mukheem Shaik
相关产品推荐
相关产品推荐

