그렇게 생각했는데, DISCOURSE_S3_UPLOAD_BUCKET와 DISCOURSE_S3_BUCKET 둘 다 설정해야만 다음 단계로 나아갈 수 있습니다. 위에 게시된 코드 스니펫에서 볼 수 있듯이 use_s3?는 여전히 s3_upload_bucket이 아니라 s3_bucket을 찾고 있습니다.
제가 아는 한, DISCOURSE_BACKUP_BUCKET을 설정해도 이 문제가 해결되지 않습니다.
두 버킷 환경 변수를 모두 설정하면 한 단계 더 나아갈 수 있지만, 이제 Discourse가 제 S3 CDN URL을 무시하고 기본 경로(base path)에서 자산을 로드하려는 새로운 문제에 부딪혔습니다. 이로 인해 CSP(Content Security Policy) 오류가 발생하고 있는데, CSP에는 제 S3 CDN의 자산 경로만 포함되어 있기 때문입니다.
DISCOURSE_S3_BACKUP_BUCKET을 DISCOURSE_BACKUP_BUCKET 대신 사용해야 합니다. 그 외에는 두 개의 CloudFront 배포를 설정하면서 모든 변수를 설정한다면 작동할 것입니다. 저희 설정을 보면 DISCOURSE_S3_BUCKET을 정의하지 않고 있습니다.
@Falco 기억이 맞다면, 이 문제를 매우 직관적이지 않게 만드는 요인 중 하나는 DISCOURSE_S3_CDN_URL을 환경 변수/GlobalSetting으로 설정할 때와 SiteSetting으로 설정할 때 동작에 차이가 있다는 점입니다. 아마 howto 글에서 이 부분을 주의 깊게 다뤄야 할 것 같습니다.
네, 죄송합니다. 이전 게시물에 오타가 있었습니다. 제 환경에서는 DISCOURSE_S3_BACKUP_BUCKET이 GlobalSetting의 s3_bucket을 설정하지 않습니다. DISCOURSE_S3_BUCKET을 설정하지 않고 어떻게 해당 rake 작업을 실행하고 계신지 모르겠습니다.
그리고 도움 주셔서 정말 감사드립니다. 이 문제는 당신의 책임이 아니라는 것도 잘 알고 있으니, 다시 한번 감사드립니다.
def ensure_s3_configured!
unless GlobalSetting.use_s3? || use_db_s3_config
STDERR.puts "ERROR: Ensure S3 is configured in config/discourse.conf or environment vars"
exit 1
end
end
use_db_s3_config는 그 추가 변수를 설정할 필요가 없게 해 줍니다. 이는 global_setting.rb의 버그일 수 있습니다. DISCOURSE_S3_UPLOAD_BUCKET만 설정하면 충분해야 하는데, DISCOURSE_S3_BUCKET와 차이가 없다면 그렇다는 뜻입니다. 다만 후자가 비권장(deprecated)되어야 한다는 당신의 의견에 동의합니다.
global_setting.rb의 버그 여부와 관계없이, 모든 변수를 선언했고 DISCOURSE_ENABLE_S3_UPLOADS가 true로 설정되어 있음에도 불구하고, Discourse가 자산을 S3 CDN이 아닌 원래 위치에 있는 것처럼 찾는 문제가 여전히 발생하고 있습니다.
이 작업을 위한 bundle exec rake uploads:migrate_to_s3 태스크가 있습니다. 버킷을 설정한 후에는 업로드 파일을 S3로 이동하기 위해 해당 태스크를 실행해야 합니다. 최근 몇 달간 S3/CDN이 변경되어 문서가 최신 상태가 아니므로, 문제가 발생했을 때를 대비하여 백업을 진행하고 준비해 두시기 바랍니다.
관리자 패널에서 데이터를 S3로 설정하면 모든 것이 정상적으로 작동하고 모든 것이 S3로 로드됩니다. ENV에는 아무 설정도 하지 않았습니다. 이것이 잘못된 건가요? 모든 것이 정상적으로 작동하는데도 ENV 설정이 필요한가요?
두 번째 예시는 상황이 다릅니다. 기존 데이터를 S3로 마이그레이션할 수 없고(새 데이터만 작동합니다) 여기서 app.yml 파일에 이 데이터를 입력해도(DISCOURSE_S3_ACCESS_KEY_ID: ‘key’ 등) 아무 변화가 없고 여전히 작동하지 않습니다. (즉,