Files
fn-serverless/examples/tutorial/hello/ruby
2017-05-25 15:38:39 -07:00
..
2017-05-25 14:31:22 -07:00
2017-05-25 15:38:39 -07:00
2017-05-25 14:31:22 -07:00
2017-05-25 14:31:22 -07:00
2017-05-25 15:38:39 -07:00

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 <DOCKERHUB_USERNAME>/hello

# 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 hello.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 myapp

Now call your function:

curl http://localhost:8080/r/myapp/hello

Or call from a browser: http://localhost:8080/r/myapp/hello

And now with the JSON input:

curl -H "Content-Type: application/json" -X POST -d @hello.payload.json http://localhost:8080/r/myapp/hello

That's it!

Note on Dependencies

In Ruby, we create a Gemfile file in your function directory, then run:

docker run --rm -it -v ${pwd}:/worker -w /worker funcy/ruby:dev bundle install --standalone --clean

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.

To update dependencies:

# Let's run bundle update
docker run --rm -it -v ${PWD}:/worker -w /worker funcy/ruby:dev bundle update

# Then bundle install again to vendor them
docker run --rm -it -v ${PWD}:/worker -w /worker funcy/ruby:dev bundle install --standalone --clean

In Review

  1. We piped JSON data into the function at the command line

    cat hello.payload.json | fn run
    
  2. We received our function input through stdin

    payload = STDIN.read
    
  3. We wrote our output to stdout

    puts "Hello #{name} from Ruby!"
    
  4. We sent stderr to the server logs

    STDERR.puts
    
  5. We enabled our Ruby gem dependencies using require_relative

    require_relative 'bundle/bundler/setup'
    

Next Up

Tutorial 2: Input Parameters