An ember-cli-deploy plugin to upload index.html to a Redis store
**WARNING: This plugin is only compatible with ember-cli-deploy versions >= 0.5.0**
This plugin uploads a file, presumably index.html, to a specified Redis store.
More often than not this plugin will be used in conjunction with the lightning method of deployment where the ember application assets will be served from S3 and the index.html file will be served from Redis. However, it can be used to upload any file to a Redis store.
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.
To get up and running quickly, do the following:
-
Ensure ember-cli-deploy-build is installed and configured.
-
Install this plugin
$ ember install ember-cli-deploy-redis
- Place the following configuration into
config/deploy.js
ENV.redis {
host: '<your-redis-host>',
port: <your-redis-port>,
password: '<your-redis-password>'
}
- Run the pipeline
$ ember deploy
Run the following command in your terminal:
ember install ember-cli-deploy-redis
For detailed information on what plugin hooks are and how they work, please refer to the Plugin Documentation.
configure
upload
activate
didDeploy
For detailed information on how configuration of plugins works, please refer to the Plugin Documentation.
The Redis host. If url is defined, then this option is not needed.
Default: 'localhost'
The Redis port. If url is defined, then this option is not needed.
Default: 6379
The Redis database number. If url is defined, then this option is not needed.
Default: undefined
The Redis password. If url is defined, then this option is not needed.
Default: null
A Redis connection url to the Redis store
Example: 'redis://some-user:some-password@some-host.com:1234'
A file matching this pattern will be uploaded to Redis.
Default: 'index.html'
The root directory where the file matching filePattern
will be searched for. By default, this option will use the distDir
property of the deployment context.
Default: context.distDir
The prefix to be used for the Redis key under which file will be uploaded to Redis. The Redis key will be a combination of the keyPrefix
and the revisionKey
. By default this option will use the project.name()
property from the deployment context.
Default: context.project.name() + ':index'
The unique revision number for the version of the file being uploaded to Redis. The Redis key will be a combination of the keyPrefix
and the revisionKey
. By default this option will use either the revisionKey
passed in from the command line or the revisionData.revisionKey
property from the deployment context.
Default: context.commandLineArgs.revisionKey || context.revisionData.revisionKey
A flag to specify whether the revision should be overwritten if it already exists in Redis.
Default: false
The Redis client to be used to upload files to the Redis store. By default this option will use a new instance of the Redis client. This allows for injection of a mock client for testing purposes.
Default: return new Redis(options)
A message that will be displayed after the file has been successfully uploaded to Redis. By default this message will only display if the revision for revisionData.revisionKey
of the deployment context has been activated.
Default:
if (context.revisionData.revisionKey && !context.revisionData.activatedRevisionKey) {
return "Deployed but did not activate revision " + context.revisionData.revisionKey + ". "
+ "To activate, run: "
+ "ember deploy:activate " + context.revisionData.revisionKey + " --environment=" + context.deployEnvironment + "\n";
}
As well as uploading a file to Redis, ember-cli-deploy-redis has the ability to mark a revision of a deployed file as current
. This is most commonly used in the lightning method of deployment whereby an index.html file is pushed to Redis and then served to the user by a web server. The web server could be configured to return any existing revision of the index.html file as requested by a query parameter. However, the revision marked as the currently active
revision would be returned if no query paramter is present. For more detailed information on this method of deployment please refer to the ember-cli-deploy-lightning-pack README.
A user can activate a revision by either:
- Passing a command line argument to the
deploy
command:
$ ember deploy --activate=true
- Running the
deploy:activate
command:
$ ember deploy:activate <revision-key>
- Setting the
activateOnDeploy
flag indeploy.js
ENV.pipeline {
activateOnDeploy: true
}
When ember-cli-deploy-redis uploads a file to Redis, it uploads it under the key defined by a combination of the two config properties keyPrefix
and revisionKey
.
So, if the keyPrefix
was configured to be my-app:index
and there had been 3 revisons deployed, then Redis might look something like this:
$ redis-cli
127.0.0.1:6379> KEYS *
1) my-app:index:9ab2021411f0cbc5ebd5ef8ddcd85cef
2) my-app:index:499f5ac793551296aaf7f1ec74b2ca79
3) my-app:index:f769d3afb67bd20ccdb083549048c86c
Activating a revison would add a new entry to Redis pointing to the currently active revision:
$ ember deploy:activate f769d3afb67bd20ccdb083549048c86c
$ redis-cli
127.0.0.1:6379> KEYS *
1) my-app:index:9ab2021411f0cbc5ebd5ef8ddcd85cef
2) my-app:index:499f5ac793551296aaf7f1ec74b2ca79
3) my-app:index:f769d3afb67bd20ccdb083549048c86c
4) my-app:index:current
127.0.0.1:6379> GET my-app:index:current
"f769d3afb67bd20ccdb083549048c86c"
Activation occurs during the activate
hook of the pipeline. By default, activation is turned off and must be explicitly enabled by one of the 3 methods above.
The following properties are expected to be present on the deployment context
object:
distDir
(provided by ember-cli-deploy-build)project.name()
(provided by ember-cli-deploy)revisionData.revisionKey
(provided by ember-cli-deploy-revision-data)commandLineArgs.revisionKey
(provided by ember-cli-deploy)deployEnvironment
(provided by ember-cli-deploy)
npm test