部署Go项目至Heroku报错:无法找到指定包,求解决方案
看起来你遇到的问题主要出在依赖路径不匹配、vendor配置不完整,还有Go版本兼容性这几个地方,我给你梳理下具体的解决步骤:
解决方案
1. 修正vendor目录的依赖路径错误
你提到的vendor目录结构是vendor/github.com/gorilla/websockets,但你的代码里import的是github.com/gorilla/websocket(注意是单数websocket,不是复数websockets)——这是导致Heroku找不到包的核心原因!
- 先删除错误的依赖目录:
rm -rf vendor/github.com/gorilla/websockets
- 重新用govendor添加正确的依赖:
govendor add github.com/gorilla/websocket@latest
执行后,vendor目录下会生成正确的vendor/github.com/gorilla/websocket路径,和你的代码import语句完全匹配。
2. 修复vendor.json的配置问题
你的vendor.json存在两个问题:package列表为空(govendor没正确追踪依赖)、Go版本不符合Heroku的支持要求:
- 把
goVersion字段改成你本地使用的go1.10.2(或者Heroku支持的更高稳定版本),替换掉原来的go1.9 - 重新生成完整的vendor.json,确保所有外部依赖被记录:
govendor init govendor add +external
执行后,vendor.json里的package列表会自动填充所有项目依赖的条目。
3. 不要提交本地构建的二进制文件
你把本地生成的MyAppBinaryFile提交到了仓库,这会导致Heroku可能跳过服务器端构建,直接使用本地环境的二进制文件,很容易出现环境不兼容的问题。应该:
- 在
.gitignore里添加二进制文件名,避免后续误提交:
echo "MyAppBinaryFile" >> .gitignore
- 从仓库中移除已提交的二进制文件:
git rm MyAppBinaryFile git commit -m "Remove local-built binary file"
让Heroku在部署时自动执行go install,构建适配服务器环境的二进制文件。
4. 验证依赖结构
完成上述步骤后,检查你的vendor目录结构应该是这样的:
vendor/ ├── github.com/ │ └── gorilla/ │ └── websocket/ │ ├── ...(依赖相关文件) └── vendor.json
同时打开vendor.json,确认package列表里已经包含github.com/gorilla/websocket的相关配置。
最后重新部署到Heroku即可:
git push heroku master
内容的提问来源于stack exchange,提问作者jj1111
相关产品推荐
相关产品推荐

