Облачная функция Firebase больше не принимает звонки из сети ruby: HTTP - PullRequest
0 голосов
/ 04 октября 2019

Вопрос

Почему вдруг все вызовы Firebase Cloud Function перестают работать при выполнении через стандартную библиотеку HTTP Ruby (Net :: HTTP)?

Фон

Это прекрасно работает:

require 'net/http'
require 'json'

uri = URI("https://postb.in/1570228026855-4628713761921?hello=world")
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Post.new(uri)
  req['Content-Type'] = 'application/json'
  req.body = {a: 1}.to_json
  http.request(req)
end

Однако тот же сценарий не работает с URL-адресом облачной функции вместо postb.in.

Выполнение того же POST-запроса к URL-адресу функции облака через cURL работает. Это происходит только при использовании библиотеки ruby ​​Net: HTTP, где время ожидания истекает:

/usr/lib/ruby/2.5.0/net/http.rb:937:in `initialize': execution expired (Net::OpenTimeout)

Эта функция вызывалась много раз в секунду в течение последних нескольких месяцев из сообщения Ruby Net: HTTP Post без проблем. И он вдруг перестал работать прошлой ночью. Я тестировал на нескольких серверах с ruby ​​версиями 2.3.8, а также 2.5.

Код функции облака:

export const testHook = functions.https.onRequest((request, response) => {
  console.log(request)
  response.status(200).send('works')
})

1 Ответ

0 голосов
/ 05 октября 2019

В итоге мы добавили require 'resolv-replace' к сценарию ruby, используя Net :: HTTP для создания HTTP POST. Обнаружено, что благодаря: Ruby Net :: OpenTimeout: срок выполнения истек

Почему Net: HTTP может разрешать URL-адреса постбинов, но не Firebase, и почему он успешно разрешает Firebase-URLв течение многих месяцев, пока внезапно нет, я не могу объяснить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...