не может создать базу данных для запуска миграции rails на docker-compose и gitlab-ci - PullRequest
0 голосов
/ 15 декабря 2018

Здравствуйте! Я не могу подключиться к службе докерских контейнеров postgresql для запуска миграций из моего приложения dockerized rails.Я запускаю сервисы из docker-compose, ошибка такова:

FATAL: the database system is starting up Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>5, "username"=>"runner", "password"=>"test", "host"=>"postgres", "database"=>"myapp_test"} rails aborted!

docker-compose.develop-ci.yml

version: '3'

services:
  postgres:
    image: postgres:10.5
    volumes:
      - myapp-postgres:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: myapp_test
      POSTGRES_USER: runner
      POSTGRES_PASSWORD: "test"
    ports:
      - '5432:5432'

  redis:
    image: redis:4.0.11
    volumes:
      - myapp-redis:/var/lib/redis/data

  web:
    command: bundle exec rails server -p 3000 -b '0.0.0.0'
    ports:
      - '3000:3000'
    depends_on:
      - postgres
      - redis
    environment:
      POSTGRES_DB: myapp_test
      POSTGRES_USER: runner
      POSTGRES_PASSWORD: "test"

итак, я подумал, что postgres нужно время для запуска перед запуском миграций, я добавил проверку работоспособности, чтобы составить так

  postgres:
    image: postgres:10.5
    volumes:
      - myapp-postgres:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: myapp_test
      POSTGRES_USER: runner
      POSTGRES_PASSWORD: "test"
    ports:
      - '5432:5432'
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U runner"]
      interval: 10s
      timeout: 5s
      retries: 5

, но возникает та же ошибка.Что может быть?

ПРИМЕЧАНИЕ. Я запускаю этот gitlab-ci runner, включаю свой этап gitlab-ci

test_development:
  stage: test
  environment: test
  script:
    - docker build --rm --tag $CONTAINER_TEST_IMAGE --target Development .
    - docker image ls
    - docker-compose -f docker-compose.develop-ci.yml run web rails db:create db:migrate RAILS_ENV=test
    - docker-compose -f docker-compose.develop-ci.yml run web rails test RAILS_ENV=test
  except:
    - master

ПРИМЕЧАНИЕ 2. Эта конфигурация работала и внезапно перестала работать без изменений в этих файлах.был сделан, и если вы спросите, мой database.yml таков:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV['POSTGRES_USER'] %>
  password: <%= ENV['POSTGRES_PASSWORD'] %>
  host: postgres

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  username: <%= ENV['POSTGRES_USER_PRODUCTION'] %>
  password: <%= ENV['POSTGRES_PASSWORD_PRODUCTION'] %>

РЕДАКТИРОВАТЬ: выполнение заданий конвейера gitlab-ci в свободном уровне AWS выдает ошибку, поэтому я включилдругой бегун на моей локальной машине и запускающий тот же код, и теперь он работает просто отлично, я чувствую, что это как-то связано с экземплярами amazon, может быть, проблема с оперативной памятью или процессором ??Я попытался перезапустить gitlab runner на AWS и на экземпляре, но он выдает ту же ошибку.

мой локальный config.toml:

concurrent = 4
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "myapp local runner"
  url = "https://gitlab.com/"
  token = "verysecret"
  executor = "docker"

[runners.docker]
  tls_verify = false
  image = "docker:stable"
  privileged = true
  disable_entrypoint_overwrite = false
  oom_kill_disable = false
  disable_cache = false
  volumes = ["/cache"]
  shm_size = 0

[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]

AWS EC2 config.toml, на котором запущен экземпляр:

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "myapp AWS EC2 runner"
  url = "https://gitlab.com/"
  token = "verysecret2"
  executor = "docker"

[runners.docker]
  tls_verify = false
  image = "docker:stable"
  privileged = true
  disable_entrypoint_overwrite = false
  oom_kill_disable = false
  disable_cache = false
  volumes = ["/cache"]
  shm_size = 0

[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
...