You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku部署Ruby on Rails项目遇Gemfile.lock Windows兼容问题求助

问题描述

接手了一个Ruby on Rails项目,完全不了解Ruby技术栈,无需修改代码。部署至Heroku时遭遇错误,Heroku提示Gemfile.lock是在Windows生成的所以被移除,但参考的解决方案里提到的库在我的Gemfile里没有引用。我只更新了Gemfile里的版本号,没加任何内容,这个Gemfile直接取自Heroku上的项目,搞不懂为什么会有Windows相关问题。附上Heroku不认可的Gemfile:

ruby '3.2.2'
source 'https://rubygems.org'
gem 'bundler', '>= 2.4.10'
gem 'rails', '7.0.5'
gem 'coffee-rails', '~> 5.0.0'
group :production, :staging do
  gem 'rails_12factor'
end
gem 'skylight', '~> 5.3.4'
gem 'newrelic_rpm'
gem 'puma'
gem 'pg'
gem 'sass-rails', '~> 6.0.0'
gem 'font-awesome-rails'
gem 'bootstrap-sass'
gem 'bootstrap-datepicker-rails'
gem 'bootstrap-will_paginate'
gem 'twitter-bootstrap-rails-confirm', '~> 2.0.2'
gem 'chartjs-ror', '~> 3.7.0' # git: 'git://github.com/paulstefanort/chartjs-ror.git', ref: '3b6184ac39'
gem 'jquery-datatables-rails', '~> 3.4.0'
gem 'jquery-ui-rails'
gem 'local_time'
gem 'devise'
gem 'jwt'
gem 'paperclip'
gem 'aws-sdk', '< 2.0'
gem 'foreman'
gem 'uglifier', '>= 4.2.0'
gem 'jquery-rails'
gem 'jbuilder', '~> 2.11.5'
group :development, :test do
  gem 'byebug'
  gem 'web-console', '~> 4.2.0'
  gem 'spring'
end
gem 'spring-commands-rspec', group: [:development, :test]
gem 'rspec-rails', group: [:development, :test]
group :development do
  gem 'sexp_processor'
  gem 'flog'
  gem 'better_errors'
end
group :test do
  gem 'shoulda-matchers', require: false
  gem 'guard-rspec'
  gem 'simplecov', require: false
  gem 'factory_girl_rails'
  gem 'faker'
  gem 'capybara'
  gem 'capybara-webkit'
  gem 'rspec-sidekiq'
  gem 'database_cleaner'
end
gem 'dotenv-deployment', group: [:development, :test]
gem 'date_validator'
gem 'country_select'
gem 'active_model_serializers'
gem 'mail'
gem 'zbase32', github: 'paulstefanort/zbase32-ruby'
gem 'lol_dba', group: :development
gem 'chosen-rails'
#gem 'chosen-sass-bootstrap-rails', github: 'caarlos0-graveyard/chosen-sass-bootstrap-rails'
gem 'mandrill-rails'
gem 'griddler', '1.5.2'
gem 'griddler-sendgrid', '1.2.0'
gem 'gcm'
gem 'pusher'
gem 'twilio-ruby'
gem 'sidekiq'
gem 'sidekiq-limit_fetch'
gem 'rack-mini-profiler', require: false
gem 'sinatra', require: false
#gem 'quarry', github: 'paulstefanort/quarry'
gem 'keen'
gem 'react-rails', '~> 2.7.1', github: 'reactjs/react-rails'
gem 'airbrake'
#gem 'rbtrace'
gem 'countries'
#gem 'rmagick', '5.2.0'
source 'https://rails-assets.org' do
  gem 'rails-assets-react-bootstrap'
end
排查要点
  • 本地操作环境:确认是否在Windows系统上运行过bundle install,哪怕Gemfile来自Heroku,Windows环境生成的Gemfile.lock会带有平台专属依赖信息,Heroku会自动识别并移除。
  • Gemfile.lock的来源:检查是否推送了本地Windows环境生成的Gemfile.lock到Heroku,或者项目历史中是否存在Windows环境生成的lock文件。
  • 间接依赖的平台特性:部分gem可能间接依赖Windows特有的库或编译版本,即使你没有直接引用,也会在lock文件中留下Windows相关标记。
可行修改方案

1. 非Windows环境重新生成Gemfile.lock(优先方案)

  • 使用Linux/macOS机器或Windows子系统(WSL)拉取项目代码。
  • 运行bundle install --without development test,仅安装生产环境依赖,生成符合Heroku要求的Unix平台Gemfile.lock。
  • 提交新生成的Gemfile.lock到代码仓库,重新部署至Heroku。

2. 强制Heroku保留Gemfile.lock(谨慎使用)

  • 在项目根目录创建.bundle/config文件,添加内容:
    BUNDLE_FROZEN: "true"
    
  • 该配置会告诉Bundler不要修改Gemfile.lock,但如果lock文件中确实存在Windows专属依赖,可能导致部署失败,仅作为备选方案。

3. 本地清理并重新生成lock文件(WSL环境下操作)

  • 删除本地现有的Gemfile.lock文件。
  • 在WSL中运行bundle install,生成基于Unix平台的lock文件。
  • 提交并推送新lock文件到Heroku。

4. 检查Gemfile中的潜在兼容问题

  • aws-sdk < 2.0版本过旧,可能存在Ruby 3.2.2兼容性问题,若允许修改可考虑升级至兼容版本;
  • react-rails使用GitHub源,确认该版本是否兼容Ruby 3.2.2和Rails 7.0.5,避免版本不匹配导致部署失败。

内容的提问来源于stack exchange,提问作者Argle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:56:00