Using the Ruby Runtime with Serverless Functions

Learn how to use the Ruby runtime to compile Ruby Serverless Functions on Vercel.
Table of Contents

The Ruby runtime is available in Beta on all plans

The Ruby runtime is used by Vercel to compile Ruby Serverless Functions that define a singular HTTP handler from .rb files within an /api directory at your project's root.

Ruby files must have one of the following variables defined:

  • Handler proc that matches the do |request, response| signature.
  • Handler class that inherits from the WEBrick::HTTPServlet::AbstractServlet class.

For example, define a index.rb file inside a /api directory as follows:

api/index.rb
require 'cowsay'
 
Handler = Proc.new do |request, response|
  name = request.query['name'] || 'World'
 
  response.status = 200
  response['Content-Type'] = 'text/text; charset=utf-8'
  response.body = Cowsay.say("Hello #{name}", 'cow')
end

An example index.rb file inside an /api directory.

Inside a Gemfile define:

Gemfile
source "https://rubygems.org"
 
gem "cowsay", "~> 0.3.0"

An example Gemfile file that defines cowsay as a dependency.

New deployments use Ruby 3.3.x as the default version.

You can specify the version of Ruby by defining ruby in a Gemfile, like so:

Gemfile
source "https://rubygems.org"
ruby "~> 3.3.x"

When defining a Ruby version, the following Ruby versions can be selected:

The following Ruby versions were previously available, but now have been disabled:

  • 2.7.x (disabled since December 7th 2023)
  • 2.5.x (disabled since November 30th 2021)

If the patch part of the version is defined, like 3.3.1 it will be ignored and assume the latest 3.3.x.

This runtime supports installing dependencies defined in the Gemfile. Alternatively, dependencies can be vendored with the bundler install --deployment command (useful for gems that require native extensions). In this case, dependencies are not built on deployment.

Last updated on July 16, 2024