OK, ssl_socket_connect의 시작 부분에 binding.pry를 추가했는데, 이 설정을 사용하려고 할 때 다음을 확인했습니다:
→ DISCOURSE_USE_S3=true DISCOURSE_S3_REGION=ap-singapore-1 DISCOURSE_S3_ENDPOINT=https://axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com DISCOURSE_S3_ACCESS_KEY_ID=foo DISCOURSE_S3_SECRET_ACCESS_KEY=bar DISCOURSE_S3_BUCKET=bucketname bin/rails c
Loading development environment (Rails 7.0.7)
[1] pry(main)> s3 = S3Helper.build_from_config; s3.list
From: /home/michael/.rvm/gems/ruby-3.2.2@discourse/gems/net-protocol-0.2.2/lib/net/protocol.rb:42 Net::Protocol#ssl_socket_connect:
40: def ssl_socket_connect(s, timeout)
41: binding.pry
=> 42: if timeout
43: while true
44: raise Net::OpenTimeout if timeout <= 0
45: start = Process.clock_gettime Process::CLOCK_MONOTONIC
46: # to_io is required because SSLSocket doesn't have wait_readable yet
47: case s.connect_nonblock(exception: false)
48: when :wait_readable; s.to_io.wait_readable(timeout)
49: when :wait_writable; s.to_io.wait_writable(timeout)
50: else; break
51: end
52: timeout -= Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
53: end
54: else
55: s.connect
56: end
57: end
[1] pry(#<Net::HTTP>)> s.hostname
=> "bucketname.axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com"
따라서 실제로 연결되는 호스트명은 bucketname.axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com이며, 이는 *.compat.objectstorage.ap-singapore-1.oraclecloud.com과 일치하지 않으므로 오류는 정확한 것입니다.
불행히도 OCI는 이러한 스타일의 접근을 지원하지 않습니다:
애플리케이션에서 경로 기반(path-based) 접근을 사용하십시오. 버추얼 호스트 스타일 접근(버킷을
{bucketnamespace}.compat.objectstorage.{region}.oraclecloud.com으로 접근하는 방식 [원문 그대로])은 지원되지 않습니다.
반대로 Discourse는 버추얼 호스트 스타일 접근({bucketname}.{namespace}.compat.objectstorage.{region}.oraclecloud.com.)만 지원합니다.
우리는 얼마 전 이 접근 방식을 작동하게 만들 수 있었을 설정을 제거했는데, 이는 잘 지원되지 않았기 때문이었습니다(커밋 메시지를 참고하십시오).
이를 작동시키는 것은 간단하지 않을 것이며, 이 지원을 추가하려면 복잡한 개발과 테스트가 필요합니다.
여기에는 용(드래곤)이 있습니다.(복잡하고 위험한 부분이 있다는 뜻)
(xref: S3 Path Style Access)