Cũng gặp vấn đề tương tự. Trong docs Google gợi ý như sau:
For best results, we recommend the following:
- Create a separate directory in your app's directory for each service.
- Each service's directory should contain the service's app.yaml file and one or more .go files.
- Do not include any subdirectories in a service's directory.
- Your GOPATH should specify a directory that is outside your app's directory and contain all the dependencies that your app imports.
Nhưng điều này messes lên cấu trúc dự án của tôi, trông như thế này:
GOPATH/
└── src
└── github.com
└── username
└── myproject
├── app.yaml
├── cmd
│ └── myproject
│ └── main.go
├── handlers
│ └── api.go
├── mw
│ ├── auth.go
│ └── logger.go
└── vendor
Trong trường hợp thư mục myproject
là một dự án git và vendor
thư mục chứa tất cả phụ thuộc. Chạy gcloud deploy
từ myproject
thư mục nơi app.yaml
cuộc sống tập không hiệu quả vì đầu tiên, main.go
tập tin không nằm trong cùng một thư mục và thứ hai (từ doc giống nhau):
you must be careful not to place your source code at or below your app's directory where the app.yaml file is located
Những gì tôi đã kết thúc làm đang xây dựng của tôi thay vào đó là thời gian chạy tùy chỉnh của riêng mình, hóa ra đó là một giải pháp rất sạch sẽ.
Đơn giản chỉ cần tạo ra Dockerfile
với lệnh sau đây:
gcloud beta app gen-config --custom
Sửa đổi nó, sau đó chỉ định runtime: custom
trong app.yaml
bạn và triển khai bình thường.
Bí quyết ở đây tất nhiên là bạn có quyền kiểm soát những gì được sao chép ở đâu.
Đây là tôi Dockerfile
:
# Dockerfile extending the generic Go image with application files for a
# single application.
FROM gcr.io/google-appengine/golang
ENV GOPATH /go
# The files which are copied are specified in the .dockerignore file
COPY . /go/src/github.com/username/myproject/
WORKDIR /go/src/github.com/username/myproject/
RUN go build -o dist/bin/myproject ./cmd/myproject
# All configuration parameters are passed through environment variables and specified in app.yaml
CMD ["/go/src/github.com/username/myproject/dist/bin/myproject"]
Đừng quên rằng App Engine hy vọng ứng dụng của bạn lắng nghe trên cổng 8080. Kiểm tra Building Custom Runtimes doc để biết thêm chi tiết.
Tôi đã nhìn thấy vấn đề này trong quá khứ, nó thường được giải quyết bằng cách đảm bảo rằng tất cả thư mục 'vendor' cho các kho lưu trữ mà tôi đang xây dựng được thiết lập đúng cách. Lệnh bạn đang chạy dẫn đến lỗi này là gì? – Aaron
Lỗi này là từ dev_appserver.py. Nó có vẻ hợp lý để giả định các thư mục của nhà cung cấp không được thiết lập đúng, nhưng bạn có bất kỳ đầu mối nào không? Nó có vẻ ok với tôi và unittests của chúng tôi chạy mà không có bất kỳ vấn đề. – emidander
Như tôi đã hiểu, công cụ 'go-app-builder' hoạt động hơi khác so với công cụ chuẩn đi để tạo thuận lợi cho các bản dựng cụ thể của App Engine, do đó có thể là lý do tại sao bạn thấy sự khác biệt trong hành vi. Bạn đang sử dụng phiên bản SDK nào? – Aaron