Tutorial 1: Ruby Function w/ Input (3 minutes)
This example will show you how to test and deploy Ruby code to Oracle Functions. It will also demonstrate passing data in through stdin.
First, run the following commands:
# Initialize your function creating a func.yaml file
fn init --name hello-ruby
# Test your function.
# This will run inside a container exactly how it will on the server. It will also install and vendor dependencies from Gemfile
fn run
# Now try with an input
cat sample.payload.json | fn run
# Deploy your functions to the Oracle Functions server (default localhost:8080)
# This will create a route to your function as well
fn deploy --app myapp
Now call your function:
curl http://localhost:8080/r/myapp/hello-ruby
Or call from a browser: http://localhost:8080/r/myapp/hello-ruby
And now with the JSON input:
curl -H "Content-Type: application/json" -X POST -d @sample.payload.json http://localhost:8080/r/myapp/hello-ruby
That's it! Our fn deploy packaged our function and sent it to the Oracle Functions server. Try editing func.rb
and then doing another fn deploy.
Note on Dependencies
In Ruby, we create a Gemfile file in your function directory. Then any fn run
or fn deploy will rebuild your gems and vendor them.
Note: Ruby doesn't pick up the gems automatically, so you'll have to add this to the top of your func.rb file:
require_relative 'bundle/bundler/setup'
Open func.rb to see it in action.
In Review
-
We piped JSON data into the function at the command line
cat sample.payload.json | fn run -
We received our function input through stdin
payload = STDIN.read -
We wrote our output to stdout
puts "Hello #{name} from Ruby!" -
We sent stderr to the server logs
STDERR.puts -
We enabled our Ruby gem dependencies using
require_relativerequire_relative 'bundle/bundler/setup'