OK, j’ai ajouté un binding.pry au début de ssl_socket_connect et voici ce que je vois en essayant d’utiliser ces paramètres :
→ 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"
donc le nom d’hôte réel auquel on se connecte est bucketname.axhjdarc4cuy.compat.objectstorage.ap-singapore-1.oraclecloud.com, ce qui ne correspond pas à *.compat.objectstorage.ap-singapore-1.oraclecloud.com, donc l’erreur est correcte.
Malheureusement, OCI ne prend pas en charge ce style d’accès :
Utilisez l’accès basé sur les chemins dans votre application. L’accès de style hôte virtuel (accès à un compartiment en tant que
{bucketnamespace}.compat.objectstorage.{region}.oraclecloud.com[sic]) n’est pas pris en charge.
Inversement, Discourse ne prend en charge que l’accès de style hôte virtuel ({bucketname}.{namespace}.compat.objectstorage.{region}.oraclecloud.com.).
Nous avons supprimé le paramètre qui aurait pu le faire fonctionner il y a quelque temps, car il n’était pas bien pris en charge (voir le message du commit).
Faire fonctionner cela ne sera pas simple et nécessitera un développement et des tests complexes pour ajouter cette prise en charge.
Ici résident les dragons.
(xref: S3 Path Style Access)