حسنًا، لقد أضفت 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[sic]).
على العكس من ذلك، يدعم Discourse فقط الوصول بنمط المضيف الافتراضي ({bucketname}.{namespace}.compat.objectstorage.{region}.oraclecloud.com).
لقد أزلنا الإعداد الذي ربما كان سيجعله يعمل منذ فترة لأنه لم يكن مدعومًا بشكل جيد (انظر رسالة الالتزام).
جعل هذا يعمل لن يكون بسيطًا وسيتطلب تطويرًا واختبارًا معقدًا لإضافة هذا الدعم.
هنا تنين.
(xref: S3 Path Style Access)