[ruby] fix: HEAD requests (#9436)

When WEBrick receives `HEAD` requests it discards the body (i.e.
`req.body.nil? => true`), this causes Vercel to throw a
`BODY_NOT_A_STRING_FROM_FUNCTION` since it is expecting the serverless
function to respond with a string in the body.

---------

Co-authored-by: Nathan Rajlich <n@n8.io>
Co-authored-by: Steven <steven@ceriously.com>
This commit is contained in:
Marc Greenstock
2023-02-17 07:41:56 +10:00
committed by GitHub
parent d52d26eaac
commit 1c8b4717e3
3 changed files with 6 additions and 3 deletions

View File

@@ -1,5 +1,8 @@
{
"version": 2,
"builds": [{ "src": "index.rb", "use": "@vercel/ruby" }],
"probes": [{ "path": "/", "mustContain": "gem:RANDOMNESS_PLACEHOLDER" }]
"probes": [
{ "path": "/", "mustContain": "gem:RANDOMNESS_PLACEHOLDER" },
{ "path": "/", "method": "HEAD", "status": 200 }
]
}

View File

@@ -73,7 +73,7 @@ def webrick_handler(httpMethod, path, body, headers)
{
:statusCode => res.code.to_i,
:headers => res_headers,
:body => res.body,
:body => res.body.nil? ? "" : res.body,
}
end

View File

@@ -384,7 +384,7 @@ async function fetchDeploymentUrl(url, opts) {
for (let i = 0; i < 50; i += 1) {
const resp = await fetch(url, opts);
const text = await resp.text();
if (text && !text.includes('Join Free')) {
if (typeof text !== 'undefined' && !text.includes('Join Free')) {
return { resp, text };
}