Heroku上Ruby+Selenium+Chrome版本锁定与依赖缺失问题求助
解决方案:Heroku上Ruby+Selenium+Chrome版本锁定/依赖修复
方法一:修复Chrome 117的libatk-1.0.so.0依赖缺失
如果希望继续使用最新版Chrome,只需补充缺失的系统依赖:
- 添加
heroku-buildpack-apt到你的buildpack列表(放在Chrome/Chromedriver buildpack之前) - 在项目根目录创建
Aptfile,写入以下依赖包:
这些是Chrome 117在heroku-22栈上运行必需的依赖,一次性安装可避免后续类似缺失问题libatk1.0-0 libatk-bridge2.0-0 libcups2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 libcairo2 - 重新部署应用,依赖会自动安装,Chrome即可正常启动
方法二:强制锁定到之前的稳定版本(Chrome 115 + Chromedriver 114)
如果需要回滚到之前验证过的版本,按以下步骤操作:
1. 配置Buildpacks
- 移除官方的
heroku-buildpack-google-chrome和heroku-buildpack-chromedriver,替换为支持指定版本的第三方buildpack - 调整buildpack顺序(确保执行顺序正确):
- heroku-buildpack-apt
- 第三方Chrome buildpack
- 第三方Chromedriver buildpack
- heroku/ruby
2. 设置版本锁定环境变量
通过Heroku CLI或控制台设置以下环境变量:
heroku config:set CHROME_VERSION=115.0.5790.170 heroku config:set CHROMEDRIVER_VERSION=114.0.5735.90
3. 禁用Selenium自动下载浏览器
Selenium 4.x默认会自动下载匹配的浏览器,必须禁用此行为:
- 方式一:通过环境变量全局禁用
heroku config:set WEBDRIVER_MANAGER_SKIP_BROWSER_DOWNLOAD=true heroku config:set SELENIUM_CHROME_PATH="/app/.apt/usr/bin/google-chrome" - 方式二:在Ruby代码中明确指定路径
options = Selenium::WebDriver::Chrome::Options.new options.binary = "/app/.apt/usr/bin/google-chrome" # 强制指定Chrome路径,覆盖Selenium的自动下载逻辑 Selenium::WebDriver::Chrome.path = "/app/.apt/usr/bin/google-chrome" driver = Selenium::WebDriver.for :chrome, options: options
4. 清除Heroku缓存并重新部署
旧缓存会导致版本覆盖,部署前强制清除:
heroku repo:purge_cache -a 你的应用名称 git commit --allow-empty -m "Purge cache to enforce version lock" git push heroku main
验证版本
部署完成后,通过Heroku控制台验证版本是否正确:
# 检查Chrome版本 puts `google-chrome --version` # 检查Chromedriver版本 puts `chromedriver --version`
内容的提问来源于stack exchange,提问作者Wesha
相关产品推荐
相关产品推荐

