Подтвердить что ты не робот

Перейти на веб-приложение на AWS с эластичным Beanstalk, не отображающим вывод в журналах

Это своего рода углубленный вопрос, поэтому я попытаюсь объяснить это как можно лучше.

Я построил небольшую службу API в Go, которую я пытаюсь развернуть в AWS, используя относительно новую утилиту AWS Elastic Beanstalk Docker ..

Вот что я сделал (код - все с открытым исходным кодом, поэтому вы можете следовать за ним, если хотите):

$ git clone https://github.com/rdegges/ipify-api.git
$ cd ipify-api
$ git fetch origin aws:aws
$ git checkout aws
$ eb init
$ eb create
$ eb deploy

Это будет использовать эластичный beanstalk для создания нового приложения (с докером) и его развертывания.

Если я запустил eb open чтобы открыть мое веб-приложение, я увижу, что отображается мой публичный IP-адрес (это правильное поведение), поэтому я знаю, что мое приложение работает/работает.

Теперь, в моем исходном коде, у меня есть несколько строк вывода отладки:

fmt.Println("WOOOOOOOOOOOO")

Вышеприведенный оператор просто печатает "WOO..." на консоли. Это выполняется каждый раз, когда выполняется новый запрос.

К сожалению, когда я запускаю eb logs для просмотра журналов экземпляров, эта строка отладки никогда не появляется - и я не могу понять, почему.

Я пробовал печатать на STDERR, печатать на STDOUT и т.д. - но я абсолютно неспособен получить какой-либо результат.

Я искал интернет, ища решения, но еще не нашел.

4b9b3361

Ответ 1

Я думаю, что import "github.com/rdegges/ipify-api/api" строится из копии на Github, а не из локальной копии. Последняя фиксация пакета api не содержит внешних операторов fmt. Кроме того, оператор log в main.go работает отлично, как и fmt.Fprintf уже в пакете api. Попробуйте проверить, что пакет api создается из источника, который, по вашему мнению, является.

ИЗМЕНИТЬ 6/1/2015:

Все мои тесты показывают, что это проблема, связанная с наличием внутреннего подпакета, и удаленная служба имеет проблемы с этим. Пакет api не создается из локальной копии. fmt.Print отлично работает с main.go, а перемещение GetIP из пакета api в пакет main позволяет fmt печатать только штрафом в stdout во время веб-запросов.

В принципе, все изменения, внесенные в локальный подпакет api, игнорируются.

Журналы EB, вероятно, говорят что-то о том, какие пакеты загружаются удаленно; мой сделал.

Я не профессионал Godep, поэтому, может быть, он может проработать. Но FWIW, похоже, может быть связано с этой проблемой, касательно. Также может возникнуть проблема с удаленной службой, не создающей с помощью godep go build, но, как я уже сказал, я не являюсь профессионалом Godep, поэтому я не уверен.

Ответ 2

Возможно, вы используете более старую версию приложения, когда я пытаюсь создать контейнер локально, я получаю следующую ошибку:

➜ docker build .
# Executing 3 build triggers
Trigger 0, COPY . /go/src/app
Step 0 : COPY . /go/src/app
Trigger 1, RUN go-wrapper download
Step 0 : RUN go-wrapper download
 ---> Running in c1854666d13c
+ exec go get -v -d
github.com/julienschmidt/httprouter (download)
github.com/rdegges/ipify-api (download)
github.com/rs/cors (download)
Trigger 2, RUN go-wrapper install
Step 0 : RUN go-wrapper install
 ---> Running in 0bbdec1b99d7
+ exec go install -v
github.com/julienschmidt/httprouter
github.com/rdegges/ipify-api/models
github.com/rs/cors
github.com/rdegges/ipify-api/api
app
# app
./main.go:27: cannot use api.NotFound (type func(http.ResponseWriter, *http.Request)) as type http.Handler in assignment:
    func(http.ResponseWriter, *http.Request) does not implement http.Handler (missing ServeHTTP method)
./main.go:28: cannot use api.MethodNotAllowed (type func(http.ResponseWriter, *http.Request)) as type http.Handler in assignment:
    func(http.ResponseWriter, *http.Request) does not implement http.Handler (missing ServeHTTP method)
The command '/bin/sh -c go-wrapper install' returned a non-zero code: 2

Есть ли какие-либо ошибки в потоке событий после развертывания? "eb events" я верю.