Postgres를 사용하여 Go 테스트 컨테이너에서 tern 마이그레이션 사용

WBOY
풀어 주다: 2024-02-06 11:42:04
앞으로
650명이 탐색했습니다.

在带有 postgres 的 go test 容器中使用 tern 迁移

질문 내용

Postgres 데이터베이스에 대한 통합 테스트를 작성하려고 합니다. 이를 위해 Go에서 테스트 컨테이너를 사용합니다. 실제 데이터베이스에서 tern 마이그레이션을 사용하고 마이그레이션을 마이그레이션 폴더에 배치했습니다. 문제는 환경에 따라 값이 달라질 수 있기 때문에 일부 마이그레이션에서 .tern.conf 파일의 속성을 사용한다는 것입니다. 로컬에 대해 유사한 구성 파일 local.tern.conf를 만들고 전역 변수 설정을 시도했습니다. 그런데 어떤 이유로 마이그레이션을 실행할 때 값이 선택되지 않습니다. 여기에 예가 있습니다 -

으아악

이것은 내 마이그레이션의 일부입니다 -

으아악

local.tern.conf입니다-

func SetupTestDatabase() *TestDatabase {
    // Set the TERN_CONFIG environment variable to the path of your local.tern.conf file
    if err := os.Setenv("TERN_CONFIG", "../local.tern.conf"); err != nil {
        // Handle error if setting the environment variable fails
        zap.S().Fatal("failed to set TERN_CONFIG", err)
    }

    // setup db container
    ctx, cancel := context.WithTimeout(context.Background(), time.Second*60)
    defer cancel()

    container, dbInstance, dbAddr, err := createContainer(ctx)
    if err != nil {
        zap.S().Fatal("failed to setup test", err)
    }

    conn, _ := dbInstance.Acquire(ctx)
    m, err := migrate.NewMigrator(ctx, conn.Conn(), "schema_version_table")
    if err != nil {
        zap.S().Fatal("failed to setup migrator", err)
    }

    if err := m.LoadMigrations("../migrations"); err != nil {
        zap.S().Fatal("failed to load migrations", err)
        return nil
    }

    if len(m.Migrations) == 0 {
        zap.S().Fatal("no migrations found")
        return nil
    }

    if err := m.Migrate(ctx); err != nil {
        zap.S().Fatal("failed to migrate", err)
        return nil
    }

    return &TestDatabase{
        container:  container,
        DbInstance: dbInstance,
        DbAddress:  dbAddr,
    }
}
로그인 후 복사

정답


구성 파일은 Postgres의 기본 5432 포트 대신 testcontainers-go에서 제공하는 임의의 포트를 대상으로 해야 한다고 생각합니다. testcontainers-go에서 호스트와 임의의 포트를 가져와 컨테이너의 HostMappedPort 메서드를 사용하여 이 파일을 동적으로 생성해야 할 수도 있습니다. 컨테이너 호스트를 얻으려면 https://golang.testcontainers.org/features/networking/#을 참조하세요

으아악

한번 해볼래?

또 다른 옵션은 특정 서비스(postgres)에 대한 포트를 정의하여 해당 포트에 대한 모든 요청을 무작위 포트로 투명하게 프록시할 수 있는 "Testcontainers Desktop"을 사용하는 것입니다. https://www.php.cn/link/9a4d6e8685bd057e4f68930bd7c8ecc0

를 참고하세요

위 내용은 Postgres를 사용하여 Go 테스트 컨테이너에서 tern 마이그레이션 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!