seminar-2020 icon indicating copy to clipboard operation
seminar-2020 copied to clipboard

django-redis 사용에 따른 workflows 수정에 대한 질문

Open YeonghyeonKO opened this issue 3 years ago • 9 comments

과제 3의 GitHub Actions를 이용한 workflows를 완료한 상태입니다.

과제 4를 수행하면서 기존의 test branch를 이용했기 때문에 workflows 설정도 같이 딸려온 상황인데요, django-redis를 사용함에 따라 django.yml의 Run Tests step에서 redis-server를 실행하려고 합니다.

그 과정에서 E: Sub-process /usr/bin/dpkg returned an error code (2) 에러를 만나 어떻게든 해결하였습니다. (dpkg dependency 문제로 추정)

질문 드리고 싶은 것은 redis-server를 실행하는 과정에서 다음과 같은 문제를 만났습니다.

image

구글링 결과 redis.conf 파일을 수정하면 된다고 하는데, 제가 이해하기로는 workflow 자체가 Ubuntu에 접속하여 실행 커맨드를 적으면 알아서 수행되는 개념으로 알고 있습니다. 위 링크에서 제시한 방법 대로라면 (아래 사진 참고) Ubuntu 내부의 파일인 redis.conf에 접근하여 특정 라인을 찾아가 일부를 수정하는 방법이 막막합니다.


image

혹시 과제4 1번을 수행하신 분들 중에 저처럼 redis 관련해서 CI 문제를 접해보신 분 없나요?

YeonghyeonKO avatar Oct 27 '20 06:10 YeonghyeonKO

EC2 컴퓨터의 파일에 sudo vi 등으로 수정할 수 있는 것처럼 GitHub Actions가 제공하는 Ubuntu에 비슷하게 접근할 수도 있을까요?

YeonghyeonKO avatar Oct 27 '20 06:10 YeonghyeonKO

workflow에서 sed 명령어를 이용해서 바꿀 수 있지 않을까요?

혹은 그냥 정상적으로 작동하는 redis.conf를 업로드 해놓고 해당 위치에 덮어쓰기 해도 될 것 같아요

Hank-Choi avatar Oct 27 '20 07:10 Hank-Choi

저는 mysql과 마찬가지로 Docker 이미지로 redis를 실행했는데, yml에서 포트만 설정해 주면 redis-server를 직접 실행시킬 필요는 없었습니다.

gyusang avatar Oct 27 '20 12:10 gyusang

@Hank-Choi 감사합니다! 관련해서 더 찾아보겠습니다

YeonghyeonKO avatar Oct 27 '20 16:10 YeonghyeonKO

@gyusang 저도 services에 mysql과 마찬가지로 redis에 대해 아래와 같이 설정하긴 했습니다. 규상님의 설정과 다소 다른 부분이 있을까요?

      redis:
        image: redis
        ports:
          - 6379:6379
        options: >-
          --health-cmd "redis-cli ping"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

YeonghyeonKO avatar Oct 27 '20 16:10 YeonghyeonKO

@YeonghyeonKO 저도 같은 방법으로 설정했습니다.

Test의 어떤 step에서 에러가 발생하는 것인가요? Initialize Containers가 정상적으로 실행되었다면,

  Status: Downloaded newer image for redis:latest
  docker.io/library/redis:latest
  /usr/bin/docker create --name 355a9fcbcd3b4a80aaa89fe7cb6c23df_redis_1e9ab7 --label 1e5c35 --network github_network_5216e763bb544a36a2db94209920886d --network-alias redis -p 6379:6379 --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 -e GITHUB_ACTIONS=true -e CI=true redis
  ...
  /usr/bin/docker inspect --format="{{if .Config.Healthcheck}}{{print .State.Health.Status}}{{end}}" 2301acdaa759d764d10e6fb701432abadcf8d5f5be08da4f63ae2ad138aa03ec
  healthy
  redis service is healthy.

위와 같이 redis service의 health-cmd(redis-cli ping)가 성공해야 하고, 즉 redis server가 정상적으로 켜진 상태가 됩니다. 위의 에러 메시지는 apt 등을 이용하여 redis를 별도로 설치한 후 server를 켜는 것으로 보이는데, 이미 redis server가 실행되는 상태에서 또 redis server를 실행하려고 해서 문제가 발생하는 것이 아닐까요?

gyusang avatar Oct 27 '20 16:10 gyusang

@gyusang 앗 그렇네요.. 문제점을 깨달았습니다. 제가 requirements.txt를 최신으로 만들지 않고(즉, redis, django-redis관련해서 명시되어 있지 않았습니다) 무작정 Run Tests에서 redis 설치해버리자 생각했던게 잘못이었습니다. requirements.txt 수정하니깐 정상적으로 작동하네요 ㅎㅎ..

YeonghyeonKO avatar Oct 27 '20 17:10 YeonghyeonKO

@YeonghyeonKO 참고로, requirements.txt 는 수동으로 작성하지 않고 pip freeze > requirements.txt 같은 과정을 통해 생성하는 것이 바람직합니다. 간접적으로 dependency상 필요한 패키지도 함께 표시되고, 실수할 여지도 없습니다. 물론 본인이 불필요하게 해당 가상환경에 설치해둔 패키지가 포함되지 않도록 주의해야겠지만요.

davin111 avatar Oct 31 '20 07:10 davin111

@davin111 감사합니다!

YeonghyeonKO avatar Oct 31 '20 08:10 YeonghyeonKO