728x90
파이썬 공식 홈페이지에서는 아래와 같은 코드로 디버그를 실행하도록 안내하고 있습니다.
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
하지만 개발을 진행된 프로젝트의 경우 위 코드로 fast api를 실행할 때, 아래와 같은 오류가 발생할 수 있습니다.
Traceback (most recent call last):
File "/Users/project/app/main.py", line 134, in <module>
app.mount("/static", StaticFiles(directory="app/static"), name="static")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/.../staticfiles.py", line 57, in __init__
raise RuntimeError(f"Directory '{directory}' does not exist")
RuntimeError: Directory 'app/static' does not exist
위 에러 메세지는 app/static
디렉토리가 존재하지 않는다고 하지만, 실제 프로젝트 환경에서는 app/static
폴더가 존재합니다. 이를 확인하기 위해 아래 코드를 작성하였습니다.
logging.info("*" * 100)
logging.info(f"현재 작업 폴더: {os.getcwd()}")
static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "static"))
logging.info(f"Static 폴더 경로: {static_dir}") # 경로 확인을 위한 출력
if os.path.isdir(static_dir):
logging.info("Static 폴더 존재.")
else:
logging.info("Static 폴더 부재.")
logging.info("*" * 100)
---
2024-06-04 09:53:42,771 - INFO - *********************************************************************************
2024-06-04 09:53:42,771 - INFO - 현재 작업 폴더: /Users/project/app
2024-06-04 09:53:42,771 - INFO - Static 폴더 경로: /Users/project/app/static
2024-06-04 09:53:42,771 - INFO - Static 폴더 존재.
2024-06-04 09:53:42,771 - INFO - *********************************************************************************
사실, mount하고 있는 코드(app.mount("/static", StaticFiles(directory="app/static"), name="static")
)를 주석처리하여 문제를 넘길 수 있지만, 매번 주석처리를 하기도 귀찮고 static에 있는 파일을 사용하는 경우가 있기 때문에 다른 방법을 찾아야 했다.
그래서 생각한 방법이 os
라이브러리를 사용하여 해당 경로를 절대 경로로 지정하는 방법이었다.
static_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "static"))
app.mount("/static", StaticFiles(directory=static_dir), name="static")
위처럼 코드를 변경한 후, 로컬 환경에서 이상 없이 작동하였다.
서버 개발자는 배포 환경이 중요하므로, 배포 환경에서도 바로 테스트를 진행했다.
배포 환경에서는 다음과 같이 log가 찍혔다.
2024-06-04 00:52:45,292 - INFO - ******************************************************************************
2024-06-04 00:52:45,293 - INFO - 현재 작업 폴더: /opt/code
2024-06-04 00:52:45,293 - INFO - Static 폴더 경로: /opt/code/app/static
2024-06-04 00:52:45,293 - INFO - Static 폴더 존재.
2024-06-04 00:52:45,294 - INFO - ******************************************************************************
배포 환경에서도 static 파일이 이상 없이 mount 되었고, 특별한 이슈 없이 잘 작동 되는 것을 확인하였다.
static 폴더 내에 파일 등이 모두 이상 없이 사용되는 것 또한 확인하였다.
이제 디버깅을 위해 mount코드를 주석처리하는 등 불필요한 과정을 생략할 수 있게 되었디.
반응형
'Server > Python' 카테고리의 다른 글
VS Code에서 Poetry 가상환경 사용하기 (1) | 2024.11.04 |
---|---|
[Python] *, 애스터리스크 연산자 언패킹 (2) | 2023.07.10 |
[Python] Function Parameter Tip (0) | 2023.06.12 |
[Python] black, pyright, isort, refurb, flake8 설치 및 적용 (0) | 2023.05.31 |