ember-cli-deploy-couchbase

1.0.0-alpha.2 • Public • Published

ember-cli-deploy-couchbase

An ember-cli-deploy plugin to upload index.html to a Couchbase store

This plugin uploads a file, presumably index.html, to a specified Couchbase store.

What is an ember-cli-deploy plugin?

A plugin is an addon that can be executed as a part of the ember-cli-deploy pipeline. A plugin will implement one or more of the ember-cli-deploy's pipeline hooks.

For more information on what plugins are and how they work, please refer to the Plugin Documentation.

Quick Start

To get up and running quickly, do the following:

$ ember install ember-cli-deploy-redis
  • Place the following configuration into config/deploy.js
ENV.couchbase = {
    "host": "couchbase://<couchbase url, ip address>",
    "bucketName": "<mybucketname>"
}
  • Run the pipeline
$ ember deploy

How it works?

When you do ember deploy production, it will

  • Upload the contents of the index.html to the key :as a doc{ content: "...." }`. Note I prefix the , so as to provide some level of namespacing in Couchbase, which stores all keys in a flat namespace.
  • Then it will update the manifest with details of the freshly deployed index.html without activating it.

What is a manifest?

The aforementioned manifest is a doc stored in couchbase keyed by <project-name>:index.html:manifest. It is of the form

{
        current: "<sha>",
        revisions: ["<sha1>", "<sha2>", "<sha3>"]
}

Currently you can override the manifest's revisions size, but it defaults to 10. What that means is that it keeps track of the last 10 deploys.

How do I integrate it into my app/api server?

Here's a simple ExpressJS + Couchbase Node.js SDK example. Note it uses GET parameter index_key to reference which <sha> version of index.html to display.

Express.js (v4.0.0)

  var express   = require("express"),
      couchbase = require("couchbase"),
      cbConfig  = { host: 'couchbase://127.0.0.1', bucketName: 'default' },
      cbClient  = new couchbase.Cluster(cbConfig.host),
      cbBucket  = cbClient.openBucket(cbConfig.bucketName, cbConfig.password, function(err) {
        if (err) {
          console.log("Error connecting to bucket!");
        } else {
          console.log("Connected to bucket!");
        }
      });

  var app = express();

  app.get("/", function(req, res) {
    // Send back index.html
    var projectName = "my-express-project";
    var indexKey = req.query.index_key;
    var manifestKey = projectName + ":index.html:manifest";

    cbBucket.get(manifestKey, function(err, manifestDoc) {
      if (err) {
        console.log(manifestKey + " not found!");
        res.status(200).send("BRB");
      } else {
        var indexDocKey = null;

        if (indexKey) {
          indexDocKey = projectName + ":" + indexKey;
        } else {
          indexDocKey = manifestDoc.value.current;
        }

        console.log("Serving version `" + indexDocKey + "`");
        cbBucket.get(indexDocKey, function(err, indexDoc) {
          if (err) {
            console.log(indexDocKey + " not found!");
            res.status(200).send("Check yo self, before you wreck yoself!");
          } else {
            res.status(200).send(indexDoc.value.content);
          }
        });
      }
    });
  });

  app.listen(3000);

Prerequisites

The following properties are expected to be present on the deployment context object:

Tests

This has been tested with Node.js v4.5.0, Couchbase v3.0.1, ExpressJS v4.12.3. Note this is still tagged as alpha till we cookup some unit tests.

Package Sidebar

Install

npm i ember-cli-deploy-couchbase

Weekly Downloads

5

Version

1.0.0-alpha.2

License

MIT

Last publish

Collaborators

  • archit