Skip to content

dashotv/rift

Repository files navigation

Rift

This application was generated using Golem.

Getting Started

The application is generated, but doesn't do much by default. To start getting things running, you'll need to enable some plugins. You can enable a plugin with a command like:

golem plugin enable [plugin]

Plugins

Some suggestions to get started.

Routes

The HTTP server

golem plugin enable routes

Routes are managed with groups. You can add a group with the golem add group command. Routes are then added to the group with the golem add route command. The example below adds a group called releases and implements a REST-like interface (Create, Update, etc). Route definitons are stored in .golem/routes/. You can manage them there or you can add addtional routes with the golem add route command.

golem add group releases --rest

This command generates wrappers (indexReleasesHandler, createReleasesHandler, etc) to respond to the following routes. You will need to implement the handler functions (ReleaseIndex, ReleaseCreate, etc) in the app/routes_releases.go file.

You can always inspect the routes with:

golem routes

Which will output something like:

Releases
         GET /releases/     ReleasesIndex (indexReleasesHandler)
        POST /releases/     ReleasesCreate (createReleasesHandler)
         GET /releases/:id  ReleasesShow (showReleasesHandler)
         PUT /releases/:id  ReleasesUpdate (updateReleasesHandler)
       PATCH /releases/:id  ReleasesSettings (settingsReleasesHandler)
      DELETE /releases/:id  ReleasesDelete (deleteReleasesHandler)

Models

The Database access layer.

golem plugin enable models

Models are managed with the golem add model command. The example below adds a model called release with a name field. Model definitions are stored in .golem/models/. You can manage the models in the yaml files in this directory.

golem add model release name:string

All the generated models are in the app/app_models.go file. A file is generated for each model for customizing the functionality of the generated model. In the example above, this creates a file called app/models_release.go. You can add custom methods to the model in this file.

Database access is enabled by the grimoire package. It provides a simple interface to creating, saving, and querying data. You can find more information at the link above. Grimoire is a layer built on kamva/mgm.

Events

Event processing and handling. Manage channels and event handlers that interact with other services using event-based communications.

golem plugin enable events

Events are managed with the golem add event command. The example below adds an event called release with a name field. Event definitions are stored in .golem/events/. You can manage the events in the yaml files in this directory.

golem add event release name:string

All of the generated channels and events are in the app/app_events.go file. A file is generated for each event for implementing the handling functionality. In the example above, this creates a file called app/events_release.go.

There are ultimately three types of events:

  • Sender - allows you to send a message to another service
  • Receiver - allows you to receive a message from another service
  • Receiver with Proxy enabled - this is a combination of the two. It allows you to receive a message, process it and pass it on to another.

Both Receeiver types of events have generated handler function called on[Name]. The Receiver handler just allows you to process the message. The Receiver with Proxy enabled handler allows you to process the message and then return a different type.

The Events plugin automatically wires all of the encoding/decoding (JSON) and sending/receiving functionality using a lightweight wrapper around the NATS messaging system. This wrapper is Mercury

Workers

Background jobs

golem plugin enable workers

Workers are managed with the golem add worker command. The example below adds a worker called ReleaseProcess. Worker definitions are stored in .golem/workers/. You can manage the workers in the yaml files in this directory.

golem add worker ReleaseProcess

All of the generated worker management code is in the app/app_workers.go file. A file is generated for each worker for implementing the work functionality. In the example above, this creates a file called app/workers_release_process.go.

The Workers plugin automatically wires all of the worker management functionality using the Minion package.

Cache

Cache management

golem plugin enable cache

Cache is a simple wrapper around the redis implementation of gokv.

The wrapper provides a Fetch method that works similarly to the Rails.cache.fetch method. It allows you to fetch a value from the cache and if it doesn't exist, it will call a function to generate the value and store it in the cache.