npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

rethinkdb-migrate

v1.4.0

Published

Rethinkdb migration tool

Downloads

5,221

Readme

rethinkdb-migrate

Build Status Coverage Status Code Climate Standard - JavaScript Style Guide Dependencies

RethinkDB migration tool

Acknowledgement

This tool is highly inspired by, or, should I say, is a rewrite of, Johan Öbrink's rethink-migrate. Unfortunately, rethink-migrate got stale. This is an attempt to improve the code and tests, track test coverage, update syntax to ES2015 and enhance functionality.

Install

You can either install rethinkdb-migrate globally:

npm install -g rethinkdb-migrate

Or define a npm script for migration and install rethinkdb-migrate locally:

npm install rethinkdb-migrate

In package.json:

{
  "scripts": {
    "migrate": "rethinkdb-migrate"
  }
}

In this last case, rethinkdb-migrate should be run as:

npm run migrate <commands>

All examples will consider that rethinkdb-migrate is installed globally.

Usage

There are currently three operations supported by rethinkdb-migrate:

Operation | Command | Description ---|---|--- create | rethinkdb-migrate create <migration-name> | Creates a migration with the given name up | rethinkdb-migrate up | Runs all un-executed migrations up down | rethinkdb-migrate down | Runs all executed migrations down (unless step option specified)

Create

$ rethinkdb-migrate create <migration name>

This operation creates a migration template file, where the database changes should be made.

The template exports two functions, up and down, that receive an instance of the RethinkDB driver and a connection object. These functions must return a Promise.

Running rethinkdb-migrate create new-migration will create a file YYYYMMDDHHmmss-new-migration.js in the directory ./migrations. Do not change the filename in any way after creating it.

Migrations template:

'use strict'

exports.up = function (r, connection) {
  // must return a Promise!
}

exports.down = function (r, connection) {
  // must return a Promise!
}

Migration example:

'use strict'

exports.up = function (r, connection) {
  return Promise.all([
    r.tableCreate('companies').run(connection),
    r.tableCreate('employees').run(connection)
  ])
}

exports.down = function (r, connection) {
  return Promise.all([
    r.tableDrop('companies').run(connection), r.tableDrop('employees').run(connection)
  ])
}

Up

$ rethinkdb-migrate up --db=mydb

This command will run all pending migrations up, in order of creation. See Options section to configure this task.

Down

$ rethinkdb-migrate down --db=mydb

This command will run all down steps from migrations that have been run previously.

Caution: this refreshes the database to before the first migration (potentially deleting data added since). Be very cautious about running this command in a production environment.

To rollback just a subset of migrations, use the step option:

$ rethinkdb-migrate down --step=2 --db=mydb

See Options section to further configure this task.

Options

The following options can be passed to rethinkdb-migrate:

Option name | Default value | Description ---|---|--- driver | rethinkdb | RethinkDB javascript driver. Can be either rethinkdb or rethinkdbdash. host | localhost | The host to connect to, if using RethinkDB official driver. port | 28015 | The port to connect on, if using RethinkDB official driver. db | None, this is required | Database name. Please note that the db will be created if it doesn't already exist, so there is no need to explicitly create it in the migrations. user | '' | RethinkDB user username | '' | RethinkDB username password | '' | RethinkDB password authKey | '' | RethinkDB authKey ssl | false | RethinkDB SSL/TLS Support. This option can be either true or an options object that will be passed to tls.connect discovery | false | Whether or not the driver should try to keep a list of updated hosts. Only available when using rethinkdbdash driver pool | false | Whether or not to use a connection pool when using rethinkdbdash driver. cursor | true | If true, cursors will not be automatically converted to arrays when using rethinkdbdash. servers | undefined | Array of { host, port } of servers to connect to. Only available when using rethinkdbdash step | none | Number of migrations to execute or rollback. If omitted, all migrations will be executed or rolled back, potentially refreshing the db to its initial state and resulting in data loss. migrationsDirectory | migrations | Directory where migration files will be saved relativeTo | process.cwd() | Root path from which migration directory will be searched or created (if inexistent)' migrationsTable | _migrations | Table where meta information about migrations will be saved. This should only be changed if you need a _migrations table in your application

Options can be passed to the script in three different ways:

  • Via environment variables
  • Via configuration files
  • Via command line arguments

Command line options take precedence over all other forms of passing options. Configuration file options take precedence over environment variables.

Passing options via environment variables

$ db=mydb rethinkdb-migrate up

Passing options via configuration file

Create a file that exports the options object (can be either a javascript file exporting an object, or a JSON file)

// config.js file

module.exports = {
  db: "mydb",
  driver: "rethinkdbdash",
  pool: true,
  servers: [
    { host: "localhost", port: 28015 },
    { host: "localhost", port: 28016 }
  ],
  ssl: false
}
$ rethinkdb-migrate up -f config.js

Passing options via command line arguments

$ rethinkdb-migrate down --db=mydb --host=127.0.0.1 --port=28016

Contributing

Feel free to suggest improvements and to open PRs. Please add/modify tests to maintain high coverage. Also, code must follow standard style.

Running tests:

In order to run tests, you need three instances of RethinkDB running, two of those should be in a cluster.

To achieve this, do as the following:

  • Install rethinkdb
  • Make sure you have two instances of RethinkDB in a cluster:
$ rethinkdb

# in another terminal session:
$ rethinkdb --port-offset 1 --directory rethinkdb_data2 --join localhost:29015
  • Make sure you have a third instance of rethinkdb running in port 48015:
$ rethinkdb -d rethinkdb_data3 --cluster-port 29017 --no-http-admin --driver-port 48015
  • Clone this repo
  • Make sure you are running node version >= 6
  • npm install
  • npm test

License

MIT License