第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 Github 操作中運(yùn)行集成測(cè)試:與 postgres 連接的問題

在 Github 操作中運(yùn)行集成測(cè)試:與 postgres 連接的問題

Go
蕪湖不蕪 2023-03-07 17:13:34
我有一些集成測(cè)試,為了成功運(yùn)行,需要一個(gè)正在運(yùn)行的 postgres 數(shù)據(jù)庫(kù),通過 docker-compose 進(jìn)行設(shè)置,并且我的 go 應(yīng)用程序從main.go. 這是我的 docker-compose:version: "3.9"services:  postgres:    image: postgres:12.5    user: postgres    environment:      POSTGRES_USER: postgres      POSTGRES_PASSWORD: password      POSTGRES_DB: my-db    ports:      - "5432:5432"    volumes:      - data:/var/lib/postgresql/data      - ./initdb:/docker-entrypoint-initdb.dnetworks:  default:    driver: bridgevolumes:  data:    driver: local和我的 Github Actions 如下:jobs:  unit:    name: Test    runs-on: ubuntu-latest    services:      postgres:        image: postgres:12.5        env:          POSTGRES_USER: postgres          POSTGRES_PASSWORD: password          POSTGRES_DB: my-db        ports:          - 5432:5432    env:      GOMODCACHE: "${{ github.workspace }}/.go/mod/cache"      TEST_RACE: true    steps:     - name: Initiate Database       run: psql -f initdb/init.sql postgresql://postgres:password@localhost:5432/my-db     - name: Set up Cloud SDK       uses: google-github-actions/setup-gcloud@v0     - name: Authenticate with GCP       id: auth       uses: "google-github-actions/auth@v0"       with: credentials_json: ${{ secrets.GCP_ACTIONS_SECRET }}     - name: Configure Docker       run: |         gcloud auth configure-docker "europe- docker.pkg.dev,gcr.io,eu.gcr.io"     - name: Set up Docker BuildX       uses: docker/setup-buildx-action@v1     - name: Start App       run: |         VERSION=latest make images         docker run -d -p 3000:3000 -e      POSTGRES_DB_URL='//postgres:password@localhost:5432/my-db?sslmode=disable' --name='app' image/app我的測(cè)試在本地運(yùn)行得很好,啟動(dòng) docker-compose withdocker-compose up并從main.go. 但是,在 Github 操作中,我收到以下錯(cuò)誤:failed to connect to `host=/tmp user=nonroot database=`: dial error (dial unix /tmp/.s.PGSQL.5432: connect: no such file or directory我錯(cuò)過了什么?謝謝
查看完整描述

2 回答

?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

我認(rèn)為這段代碼有不止一個(gè)問題。


問題一: 在你的代碼中我沒有看到你運(yùn)行docker-compose up,因此我假設(shè) Postgres 沒有運(yùn)行。


問題二: 在這一行:docker run -d -p 3000:3000 -e POSTGRES_DB_URL='//postgres:password@localhost:5432/my-app?sslmode=disable' --name='app' image/app


您將 Postgres 的主機(jī)指向localhost,它在您的本地機(jī)器上工作。因?yàn)楸镜刂鳈C(jī)是您的本地計(jì)算機(jī)。不過,在您使用時(shí),docker run您并不是在本地機(jī)器上運(yùn)行它,而是在 docker 容器中運(yùn)行。本地主機(jī)指向容器內(nèi)部。


兩者的可能解決方案


由于您已經(jīng)在使用 docker-compose,我建議您也在那里添加您的測(cè)試 Web 服務(wù)器。


將您的 docker-compose 文件更改為:


version: "3.9"

services:


  webapp:

    build: image/app

    environment:

      POSTGRES_DB_URL='//postgres:password@postgres:5432/my-app?sslmode=disable'

    ports:

      - "3000:3000"

    depends_on:

      - "postgres"


  postgres:

    image: postgres:12.5

    user: postgres

    environment:

      POSTGRES_USER: postgres

      POSTGRES_PASSWORD: password

      POSTGRES_DB: my-app

    ports:

      - "5432:5432"

    volumes:

      - data:/var/lib/postgresql/data

      - ./initdb:/docker-entrypoint-initdb.d

networks:

  default:

    driver: bridge


volumes:

  data:

    driver: local

如果您現(xiàn)在運(yùn)行docker-compose up,這兩種服務(wù)都將可用。它應(yīng)該有效。雖然我不是 github-actions 專家,所以我可能錯(cuò)過了一些東西。至少像這樣,你可以像在 CI 中一樣在本地運(yùn)行你的測(cè)試,我一直認(rèn)為這是一個(gè)很大的優(yōu)勢(shì)。


查看完整回答
反對(duì) 回復(fù) 2023-03-07
?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊

您缺少的是在 Github Actions 服務(wù)器中設(shè)置實(shí)際的 Postgres 客戶端(這就是找不到 psql 工具的原因)。


將其設(shè)置為一個(gè)步驟。


     - name: Install PostgreSQL client

        run: |

          apt-get update

          apt-get install --yes postgresql-client

除此之外,如果您通過 docker-compose 運(yùn)行所有內(nèi)容,您將需要等待 postgres 啟動(dòng)并運(yùn)行(健康和接受連接)。


考慮以下 docker-compose:


version: '3.1'


services:

  api:

    build: .

    depends_on:

      - db

    ports:

      - 8080:8080

    environment:

      - RUN_UP_MIGRATION=true

      - PSQL_CONN_STRING=postgres://gotstock_user:123@host.docker.internal:5432/gotstockapi?sslmode=disable

    command: ./entry

    

  db:

    image: postgres:9.5-alpine

    restart: always

    environment:

      - POSTGRES_USER=root

      - POSTGRES_PASSWORD=password

    ports:

      - "5432:5432"

    volumes:

      - ./db:/docker-entrypoint-initdb.d/

您需要注意幾件事。首先,在我們environment的部分中,它是作為環(huán)境變量傳遞的數(shù)據(jù)庫(kù)的連接字符串。注意主機(jī)是。apiPSQL_CONN_STRING=postgres://gotstock_user:123@host.docker.internal:5432/gotstockapi?sslmode=disablehost.docker.internal


除此之外,我們command: ./entry在 api 部分中有。該entry文件包含以下#!/bin/ash腳本:


#!/bin/ash

NOT_READY=1

while [ $NOT_READY -gt 0 ] # <- loop that waits till postgres is ready to accept connections

do 

    pg_isready --dbname=gotstockapi --host=host.docker.internal --port=5432 --username=gotstock_user

    NOT_READY=$?

    sleep 1

done;

./gotstock-api # <- actually executes the build of the api

sleep 10

go test -v ./it # <- executes the integration-tests

最后,為了讓 psql 客戶端在上面的腳本中工作,api 的 docker 文件如下所示:



# syntax=docker/dockerfile:1


FROM golang:1.19-alpine3.15


RUN apk add build-base


WORKDIR /app


COPY go.mod go.sum ./

RUN go mod download && go mod verify


COPY . .


RUN apk add postgresql-client


RUN go build -o gotstock-api


EXPOSE 8080

注意RUN apk add postgresql-client哪個(gè)安裝了客戶端。


快樂黑客!=)


查看完整回答
反對(duì) 回復(fù) 2023-03-07
  • 2 回答
  • 0 關(guān)注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)