Clustered Angular, Polymer, Compound, Passport, Famo.us on PM2+NGinx
All trademarks other than Diamonds belong to their respective owners. Those owners do not endorse nor directly support this project. Diamond was created out of a personal need for a startup of mine. So utilize at your own risk. And feel free to contribute once alpha is released this summer! If interested in helping sooner please email me.
Diamonds are Compound, Angular, Polymer, Famo.us and Yo (Yeoman) super generators for a hybrid HMVC-to-MVVM full stack web development platform. While Compound is a "full stack" solution in itself it doesn't do things that Angular does bindingly well nor clairvoyantly adept like Polymer nor touch the advanced UI/X capabilities of Famo.us and Polymer in unison.
Kit and caboodle-wise our goal is to breed the parent project's strengths into a new species by adding modular code to their respective APIs and/or monkey patching when necessary.
How does a developer start working on a new project? Note: Steps 2 and 3 annotate step 1's actions
diamonds installs: pm2, yo, generator-angular, generator-polymer, generator-famous, jugglingdb-redis,compound, jugglingdb, jugglingdb-redis, passport, and redis
First run: npm install diamonds; diamonds DiamondApp;
Wrapper will start by executing 'compound-init ' script installing Compound and patching it for Diamonds. In order to co-create Angular components a basic Compound app will be created called "DiamondApp" exposing the JugglingDB ORM API, view files, along with crud controller & generic nested routes.
Then script 'yo-init' will initialize the Angular app structural files & directories using our ejs chrome and view partials while patching Angular's dependency injection onto the 'client side' Compound controller methods for realtime integrated data binding instead of remaining limited to finite-state machine as Compound is natively.
While these two projects coexist in same root directory the Angular app will use 'aapp/' and Compound in 'capp/' to keep their code & resources isolated since they could conflict otherwise untested. As testing goes on with Diamonds we will try merging it into a unified application hierarchy if possible.
Each Diamond has a unique origin API server along with authorized edge workers list. By default Diamond's origin will use a Redis store installed as a prerequiste. Redis will come pre-configured for local-only, no pw, DB:2 on :6379._ but Mysql/Maria/Toku, Postgres, Couch, Mongo, RethinkDB, and Dynamo are also supported.
Edge workers generally provide rate-limited promptly-consistent cached & spooling PHP+LevelDB API access. Their edge behavior ensures a peformance enhancing shared-nothing data architecture while synchronously pushing queued edge client requests to the origin leaving shared data isolated, virtually incorruptable, and optimal for scaling any kind of back pressure.
If you want to publicly expose origin API or just intend to use a single server you can set origin and worker to same host bypassing this distributed organization.
Depending on the components being developed and tested: Angular or Compound, you'll need to use 'grunt test' or 'compound test' respectively. A Diamond cli will be provided to do integrated deployments borrowing from each project's default testing frameworks. Finally a PM2 cluster manager will help Grunt deploy your app(s).
How do I run the project's automated tests?
grunt build; # results in < project >/dist
pm2 start server.js -i 3 --name <DimaondApp>...
Stay tuned. email peter at m ind like dawt calm