I just released preliminary/experimental support for running a Stunt |
Improvise server on/in the Heroku cloud. The demo app is:
http://stunt-test-1.herokuapp.com/
The app is running the latest release of the Stunt server and a very
slightly modified version of Improvise (I think ~3 lines of changes).
The buildpack is here:
https://github.com/toddsundsted/heroku-buildpack-stunt
and a suitable project template (with changes) (based on the latest
Improvise) is here:
https://github.com/toddsundsted/stunt_test_1
(note that this project template will disappear at some point in the
near future, once I roll the changes into Improvise itself).
Since Heroku doesn't persist process state/changes, and may kill
active processes without warning, the end-game here is to provide some
level of support for transparently serializing instances of MOO
objects to a fast, shared persistent store (Postgres? MongoDB? Redis?)
and to move interaction with the server to a web interface (rather
than the common TCP/telnet interface). Players will never know what
instance of the actual server they are dealing with, nor will they
care.
I was actually a little surprised at how well this worked. As I write
this, I have three separate browser sessions for three different users
hitting the same Heroku dyno instance. Long-polling for the web
console is working (as was the console). I was able to hit the Stunt
package repository and install a few packages (so outbound network
connections work). I can read from the Heroku filesystem. The log is
available via "heroku logs".
In theory, this buildpack could work with LambdaMOO, given a suitable
core and installed web-server object. I'll leave it to some other
interested party to work all that out.
All in all, I just moved one _big_ step closer to where I want to take
MOO.
Todd