Я создаю серверную часть веб-приложения для облачных функций Firebase и состоит из двух функций:
- ФУНКЦИЯ WEBSCRAPER, написанная в Python3 с использованием BeautifulSoup, для очистки содержимого с нескольких страниц (легко около 500 страниц) , и возвращает извлеченное содержимое в виде json
- SCHEDULED FUNCTION, записанное в Nodejs, которое вызывает еженедельные интервалы в элементе 1 в элементе 1, и обновляет Firestore с очищенным содержимым.
Запланированная функция использует Ax ios для выполнения запросов на получение.
Проблема Я постоянно получаю следующую ошибку в запланированной функции нерегулярно. Это происходит иногда при каждом вызове, а иногда даже не один раз, что затрудняет отладку. Нерегулярности также возникают в средах разработки, промежуточных и промежуточных приложений:
//err.response
{ status: 500,
statusText: 'Internal Server Error',
headers:
{ 'x-cloud-trace-context': '2f22d7fc6a9044dcfc31acafc2d50e54',
date: 'Thu, 23 Apr 2020 04:45:39 GMT',
'content-type': 'text/html; charset=UTF-8',
server: 'Google Frontend',
'content-length': '323',
'alt-svc': 'quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,h3-T050=":443"; ma=2592000',
connection: 'close' },
config:
{ url: 'CLOUD_FUNCTIONS_URL',
method: 'get',
params: {//params}
}
Когда бы ни возникали такие ошибки в РАСПИСАННОЙ ФУНКЦИИ, в FUNCTION WEBSCRAPER фактически не было ошибок, ie Консоль Firebase Cloud Function печатает Function execution took XXXX ms, finished with status code: 200
для ФУНКЦИИ WEBSCRAPER.
Я также проверил функцию ФУНКЦИИ WEBSCRAPER, чтобы после ее завершения с status code: 200
, действительные результаты возвращались правильно .
Часть моего код следующий:
//In the SCHEDULED FUNCTION where I call the WEBSCRAPER FUNCTION
function getContentPromise(param1, param2) {
let url = //WEBSCRAPER FUNCTION's url
let parameters = {param1: param1, param2: param2};
let config = {
params: parameters,
}
return axios.get(url, config)
.then((response) => {
return response.data
})
.catch((err) => {
console.log('Retrying...', err.response) //Error thrown here
return getContentPromise(param1, param2)
})
}
//In the WEBSCRAPER FUNCTION
//At main.py
def scrape(request):
response_object = scrape(request)
return jsonify(response_object)
//At the scrape function
def scrape(request):
param1 = request.args.get('param1')
param2 = request.args.get('param2')
//Some scraping stuff happening here using beautifulsoup
response_object = {}
response_object[constants.status_code_key] = 200
response_object['contents'] = contents //contents in json
return response_object