Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
$GOPATH/go.mod存在,但不应在AWS Elastic Beanstalk中_Go_Bitbucket_Amazon Elastic Beanstalk_Go Modules - Fatal编程技术网

$GOPATH/go.mod存在,但不应在AWS Elastic Beanstalk中

$GOPATH/go.mod存在,但不应在AWS Elastic Beanstalk中,go,bitbucket,amazon-elastic-beanstalk,go-modules,Go,Bitbucket,Amazon Elastic Beanstalk,Go Modules,我正在尝试使用bitbucket管道和AWS Elastic Beanstalk部署一个基于gin框架的golang应用程序。我创建了我的package application.zip,其中包含在EB中部署应用程序所需的所有文件,当我通过管道或AWS控制台中的手动菜单推送应用程序时,我得到了以下信息: 17:21:49 make.1 | go: finding github.com/appleboy/gin-jwt v2.5.0+incompatible 17:21:49 make.1 |

我正在尝试使用bitbucket管道和AWS Elastic Beanstalk部署一个基于gin框架的golang应用程序。我创建了我的package application.zip,其中包含在EB中部署应用程序所需的所有文件,当我通过管道或AWS控制台中的手动菜单推送应用程序时,我得到了以下信息:

17:21:49 make.1 | go: finding github.com/appleboy/gin-jwt v2.5.0+incompatible
  17:21:49 make.1 | go: downloading github.com/appleboy/gin-jwt v2.5.0+incompatible
  17:21:49 make.1 | go: extracting github.com/appleboy/gin-jwt v2.5.0+incompatible
  17:21:50 make.1 | go: finding gopkg.in/dgrijalva/jwt-go.v3 v3.2.0
  17:21:50 make.1 | go: downloading gopkg.in/dgrijalva/jwt-go.v3 v3.2.0
  17:21:50 make.1 | go: extracting gopkg.in/dgrijalva/jwt-go.v3 v3.2.0
  17:21:50 make.1 | + GOOS=linux
  17:21:50 make.1 | + GOARCH=amd64
  17:21:50 make.1 | + go build -o bin/application '-ldflags=-s -w'
  17:21:50 make.1 | go: cannot find main module; see 'go help modules'
  17:21:50 make.1 | exited with code 1
  17:21:50 system | sending SIGTERM to all processes
我发现我忘记了go.mod文件,确实添加了它,然后我收到了这些消息,一切都很好:

  17:27:59 make.1 | go: extracting github.com/appleboy/gin-jwt v2.5.0+incompatible
  17:27:59 make.1 | go: downloading gopkg.in/dgrijalva/jwt-go.v3 v3.2.0
  17:27:59 make.1 | go: extracting gopkg.in/dgrijalva/jwt-go.v3 v3.2.0
  17:27:59 make.1 | go: finding gopkg.in/dgrijalva/jwt-go.v3 v3.2.0
  17:27:59 make.1 | + GOOS=linux
  17:27:59 make.1 | + GOARCH=amd64
  17:27:59 make.1 | + go build -o bin/application '-ldflags=-s -w'
  17:27:59 make.1 | go: downloading golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c
  17:28:00 make.1 | go: extracting golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c
  17:28:00 make.1 | go: finding golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c
  17:28:01 make.1 | exited with code 0
  17:28:01 system | sending SIGTERM to all processes
但在工作时,我对代码做了一些更改,我再次提交,认为现在一切都很好,但我得到了以下日志行:

  Executing: HOME=/tmp /opt/elasticbeanstalk/lib/ruby/bin/ruby /opt/elasticbeanstalk/lib/ruby/bin/foreman start --procfile /tmp/d20191202-5748-15rj5l8/eb-buildtask-0 --root /var/app/staging --env /var/elasticbeanstalk/staging/elasticbeanstalk.env
  17:32:00 make.1 | started with pid 5761
  17:32:00 make.1 | + go get github.com/gin-gonic/gin
  17:32:00 make.1 | $GOPATH/go.mod exists but should not
  17:32:00 make.1 | exited with code 1
  17:32:00 system | sending SIGTERM to all processes
现在我对$GOPATH/go.mod的存在感到迷茫,但它不应该存在。我使用的是上一代go版本1.13.4,AWS使用的是1.13.2

更多信息

我会尽量更准确地描述这个项目,如果日志不够的话,很抱歉。 我有一个使用gorm+gin的简单应用程序,它基本上是一个restapi服务器。 我的项目结构如下:

#!/usr/bin/env bash
# Stops the process if something fails
set -xe
touch /var/app/current/go.bak
sudo rm /var/app/current/go.*

# get all of the dependencies needed
go get "github.com/gin-gonic/gin"
go get "github.com/jinzhu/gorm"
go get "github.com/jinzhu/gorm/dialects/postgres"
go get "github.com/appleboy/gin-jwt"

# create the application binary that eb uses
GOOS=linux GOARCH=amd64 go build -o bin/application -ldflags="-s -w"
/go/src/company.com/project

我在里面有这些文件和文件夹:

application.go
go.mod
Controller/dashboardController.go
Model/user.go
Service/utility.go
BuildFile
Procfile
最后两个文件用于让EB在S3中上传后构建项目。 当然,本地的一切都很好,以及我第一次上传包含go.mod的完整项目时,请参阅第二组日志。但当我修改一个文件,再次打包应用程序并通过bitbucket piple或aws控制台将其发送给EB时,没关系,我得到了错误

解决方案

经过多次尝试后,我决定通过ssh登录ElasticBeanstalk,我发现如果我在build.sh脚本中添加以下行,所有问题都会消失:

sudo rm /var/app/current/go.*
最后我的build.sh文件如下所示:

#!/usr/bin/env bash
# Stops the process if something fails
set -xe
touch /var/app/current/go.bak
sudo rm /var/app/current/go.*

# get all of the dependencies needed
go get "github.com/gin-gonic/gin"
go get "github.com/jinzhu/gorm"
go get "github.com/jinzhu/gorm/dialects/postgres"
go get "github.com/appleboy/gin-jwt"

# create the application binary that eb uses
GOOS=linux GOARCH=amd64 go build -o bin/application -ldflags="-s -w"

也许这对你有帮助

看起来您有GOPATH=。您正在将模块复制到同一个位置。go get的作用是创建./src/golang.org/x/vgo,然后副本创建./go.mod,这样看起来GOPATH下载的源代码就存在于模块中。这反过来又使它看起来像src/golang.org/x/vgo是您正在处理的项目的一部分,而vgo对其自身(不受支持的)使用vendoring感到非常困惑

原始帖子参考:


附加源:

当设置了
GOPATH
go-get
将请求的模块安装到
GOPATH
中提供的路径,但如果使用
.mod
文件,它将使用工作目录

在您的案例中,您设置了
GOPATH
.mod
文件

您可以
unset
GOPATH,如下所示:

unset GOPATH

它应该能解决你的问题。或者,您也可以删除
.mod
文件。

$GOPATH/go.mod
不应该存在,事实上,在
GOPATH
的顶层应该没有文件。你到底想做什么?请提供一个,而不仅仅是一些日志输出。