이미지 업로더를 React와 Flask로 만들기

2669 단어 경 6ReactFlask

포인트



이미지 자체는 외부 스토리지로 관리하고, DB에서는 이미지 URL을 관리.

로컬 개발의 전체 이미지





학습



back_end와 front_end의 git 관리는 분리



제대로 앱을 처음부터 만들어본 적이 없었기 때문에, 이번에 처음 알았는데, heroku의 경우는 root 바로 아래에 heroku를 움직이기 위한 파일을 여러가지 만들 필요가 있고, 거기의 계층을 스타트 로 하면 읽는 path가 로컬의 때와 바뀌어 와, 같은 느낌으로 엉망이 되었습니다. 그래서 미리 git 관리를 나누어 두면 이러한 자체는 미연에 막았다고 생각합니다.

heroku는 파일 시스템을 다룰 수 없다.



이것에 이번 제일 고전한 것이 아닐까 생각합니다만, heroku로 예를 들면 “명령을 실행해 sample.txt 파일을 만든다”라고 하는 것은 전혀 할 수 없게 되어 있습니다.
이번에 제 경우에는
  • 이미지를 uploads 디렉토리 아래에 이미지 파일로 저장하고 나중에로드합니다.
  • migrations 디렉토리를 heroku 콘솔에서 migrate (migrate 용 파일이 생성됨)

  • 이 두 가지로 막혔습니다. 둘 다 heroku에서 git 관리되지 않은 파일을 새로 생성하려고 시도했으며 heroku의 사양에 좋지 않았습니다. 해결 방법은 다음과 같습니다.

    1.PIL의 Image를 이용
    
    # bytes形式で読み込み
    img = Image.open(file) #FileStorageクラスがなかなか厄介
    # メモリでデータを保持する
    bio = io.BytesIO()
    img.save(bio, format=image_format)
    
    blob.upload_from_string(data=bio.getvalue(), content_type=content_type)
    

    2. 로컬에서 migrate까지 완료한 후 push하여 heroku에서 upgrade만 실행

    숨겨진 json 파일을 heroku에서로드하려면 환경 변수에 억지로 넣습니다.



    firebase 인증을 위해 json 파일을 읽어야했습니다.
    cred = credentials.Certificate('./serviceAccountKey.json')
    

    다만, 이것은 중요한 정보로 git로 관리는 할 수 없기 때문에, heroku상에는 없게 되어 버려, json 파일이 없다고 하는 에러가 발생했습니다. 해결책으로서는 내용의 json을 무리하게 환경 변수에 넣는 것으로 대응했습니다.
    export SERVICE_ACCOUNT_KEY='{"type": "service_account","project_id": "...
    

    좋은 웹페이지 즐겨찾기