binding.pry を ssl_socket_connect の先頭に追加して、これらの設定を使用しようとしたときに表示されるのは次のとおりです。
→ 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 はこのスタイルのアクセスをサポートしていません。
アプリケーションでパスベースのアクセスを使用してください。仮想ホスト スタイルのアクセス(バケットを
{bucketnamespace}.compat.objectstorage.{region}.oraclecloud.com[ママ] としてアクセスすること)はサポートされていません。
逆に、Discourse は仮想ホスト スタイルのアクセス ({bucketname}.{namespace}.compat.objectstorage.{region}.oraclecloud.com.)のみをサポートしています。
以前は機能した可能性のある設定を削除しました。これは、あまりサポートされていなかったためです(コミットメッセージを参照)。
これを機能させるには、このサポートを追加するために複雑な開発とテストが必要であり、簡単ではありません。
注意が必要です。
(xref: S3 Path Style Access)