Heroku运行Rails rake任务报错无法找到rake-13.0.6依赖
Heroku部署后执行Rake任务提示找不到rake-13.0.6版本排查方案
问题现象
编写的Rake任务在本地环境可正常运行,部署到Heroku平台后执行失败,报错提示无法找到rake-13.0.6版本,报错信息如下:
➜ mw_wines_feed git:(master) heroku run rake mw_wines:import_feed Running rake mw_wines:import_feed on ⬢ mw-wines-feed... up, run.7472 (Hobby) Could not find rake-13.0.6 in any of the sources Run `bundle install` to install missing gems.
本地已执行bundle install后将代码推送到master分支,问题未解决,项目Gemfile中已明确声明对应版本的rake依赖,Gemfile配置如下:
source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.7.0' gem 'rails', '~> 6.1.6' gem 'pg', '~> 1.1' gem 'puma', '~> 5.0' gem 'sass-rails', '>= 6' gem 'webpacker', '~> 5.0' gem 'turbolinks', '~> 5' gem 'jbuilder', '~> 2.7' # gem 'redis', '~> 4.0' # gem 'bcrypt', '~> 3.1.7' # gem 'image_processing', '~> 1.2' gem 'bootsnap', '>= 1.4.4', require: false group :development, :test do gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do gem 'web-console', '>= 4.1.0' gem 'rack-mini-profiler', '~> 2.0' gem 'listen', '~> 3.3' gem 'spring' end group :test do gem 'capybara', '>= 3.26' gem 'selenium-webdriver', '>= 4.0.0.rc1' gem 'webdrivers' end gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'active_record_fix_integer_limit' gem 'addressable' gem 'dotenv-rails', groups: [:development, :test] gem 'google_drive' gem 'googleauth' gem 'rake', '13.0.6'
排查解决步骤
按以下顺序逐一排查即可解决问题:
- 首先确认
Gemfile.lock文件已提交到Git仓库。Heroku部署时依赖该文件锁定gem版本,若本地执行bundle install后未提交该文件,或该文件被加入.gitignore,Heroku端就无法安装到指定版本的rake。本地可执行grep -A 2 "rake" Gemfile.lock确认锁文件中rake版本为13.0.6,确认后提交该文件重新推送部署即可。 - 清理Heroku构建缓存后重新部署。Heroku会缓存旧的依赖包,缓存异常时会出现版本找不到的问题,执行以下命令清理缓存:
# 安装构建插件(已安装可跳过) heroku plugins:install heroku-builds # 替换为你的Heroku应用名 heroku builds:cache:purge -a mw-wines-feed # 提交空提交触发重新部署 git commit --allow-empty -m "purge build cache" git push heroku master - 确认Heroku端Ruby版本与本地一致。Gemfile中已锁定Ruby版本为2.7.0,查看Heroku部署日志中输出的Ruby版本号,若版本不匹配,会导致gem解析异常,可在Heroku配置中明确指定Ruby版本,或调整Gemfile中的Ruby版本与Heroku栈支持的版本对齐。
- 检查是否存在依赖冲突。本地执行
bundle list | grep rake确认本地安装的rake版本确实为13.0.6,若存在其他gem依赖了不同版本的rake,会导致锁文件中rake版本不符合预期,此时可删除本地Gemfile.lock后重新执行bundle install生成新的锁文件,确认版本正确后提交重新部署。 - 部署完成后可执行
heroku run bundle list | grep rake验证Heroku端是否已正确安装对应版本的rake,再执行Rake任务即可。
内容的提问来源于stack exchange,提问作者fasito
相关产品推荐
相关产品推荐

