Я пытаюсь загрузить статический контент HTML + друзей в сырой репозиторий Nexus 3.Что касается , документация идет , единственный способ загрузить файлы - использовать HTTP PUT.Конечно же,
curl -v --user 'user:pw' --upload-file my_file.html \
http://my.nexus/repository/my-raw-repo/my_file.html
работает должным образом, и к файлу можно получить доступ по адресу http://my.nexus/repository/my-raw-repo/index.html
. Однако добавление этого развертывания в мой процесс Rake оказалось проблематичным.Вот некоторые вещи, которые я пробовал.
С net/http
:
require 'net/http'
uri = URI("http://my.nexus/repository/my-raw-repo")
file = "index.html"
Net::HTTP.start(uri.host, uri.port) do |http|
request = Net::HTTP::Put.new "#{repo_url}/#{file}"
request.basic_auth(user, pw)
<snip>
response = http.request request
raise "Upload failed: #{response.code} #{response.message}\n#{response.body}" \
unless response.is_a?(Net::HTTPSuccess)
end
Я пробовал несколько вариантов для <snip>
.
Установить тело для содержимого файла в виде строки:
request.body = File.read("#{file}")`
Запрос завершается без ошибок, но Nexus показывает размер файла 0 байтов.
Отправить данные формы всодержимое файла в виде потока:
request.set_form([['upload', File.open("#{file}")]], 'multipart/form-data')
Это очевидно: добавлен многочастный желоб, который Nexus не удаляет:
С rest-client
:
require 'rest-client'
file = "index.html"
begin
RestClient::Request.execute(
method: :put,
url: "http://my.nexus/repository/my-raw-repo/#{file}",
<snip>
user: user,
password: pw
)
rescue RestClient::ExceptionWithResponse => e
raise "Upload failed: #{e.response}"
end
И для <snip>
(отгадывание не совсем понятной документации):
body: File.read("#{file}")
-> 0 байтов. payload: File.read("#{file}")
-> 0 байтов. payload: { file: File.new("#{file}") }
-> Multiостался желоб. payload: { multipart: false, file: File.new("#{file}") }
-> остался желоб из нескольких частей.
Мне кажется, я пробовал еще несколько комбинаций, которые я не помню, спохожие результаты.
Примечание: Я пропустил части, связанные с SSL с самозаверяющим сертификатом, потому что он не должен быть связан.
Как я могу сказать какой-либо библиотеке (или любой другой) сделать PUT с данными, но без нескольких частей?Или, если это не проблема, что я делаю неправильно?
Я хочу использовать полностью Ruby-решение (т.е. не делегировать системе curl
), чтобы сборка была (как) переносимой (как)возможно).