$ play dist
$ unzip app-name.zip
$ cd app-name
$ ./bin/start
Can dist on build server and copy archive to prod if that option is available (or upload from local dev machine).
It's ridiculously simple, and all generated at compile time.
I don't understand hand wringing deployments, is Rails _that_ good?
I mean, outside of MVC, RESTful routing, form validation, AR, migrations, etc. functionality that exists in other frameworks/libraries, what does Rails actually bring to the table that is unique?
Is it the gem ecosystem, where you can find x,y,z functionality that exists nowhere else, or some cutting edge Rails feature? I don't know, just asking, spent a year on a Rails clone, Grails, and was not really taken, tracking runtime MOP errors is no joy, give me a static compiler any day over that.
Need versioned assets? Need multiple versions of assets in prod? Play doesn't do it out of the box.
Need a specific version of the JVM? Play can't help you there.
Need to change your start script to do something different (ports, SSL, JVM config). Play can't do it.
Play is very far from deploy script.
Just turn off assets entirely as the Capistrano author does with Rails. Running Bower + GruntJS here, snappy fast, well happy working with tools designed for the job.
Not sure about multiple asset versions, I just have front end web server handle inbound /assets/img/foo.timestamp.png request as /assets/img/foo.png. It's not too difficult to create an asset helper trait to append timestamp at container start up to asset paths.
> Need a specific version of the JVM? Play can't help you there.
This is hardly a strike against Play, installing Java is not exactly an overwhelming task ;-)
> Need to change your start script to do something different (ports, SSL, JVM config). Play can't do it.
Excuse me?
./bin/start -server -Xms128m -Xmx512m -Dhttp.port=9001 -Dhttp.address=172.16.53.1 -Dlogger.file=${HOME}/logger.xml -Dconfig.file=conf/prod.conf
Me I run Rails on Linode and it's fine, but yes, it's unfortunate Ruby/Rails never reached LAMP-level simplicity on virtual hosts.
I'm not sure, I just think it's worth discussing.
https://gist.github.com/kaspergrubbe/5792356
Is this an issue with Graphite? Because I feel this setup is quite elaborate compared to using Rubygems and bundler.
sudo apt-get --assume-yes upgrade
in it. But to your point, I think most of the easy_install packages could be handled by pip. The apt packages look like almost all non-python major components like rabbitmq, apache, sqlite, etc which are best provided that way.I'm not sure about Graphite itself, but at a quick glance it's not clear why it's all 'sudo python setup.py' rather than in a package.
Graphite is both a good and bad example. Good because it is really complex and documentation is a little sketchy. I've written a fabric script[1] that automates the process, and it's far from trivial. Bad example, because it's not really a single app, but a system - a collection of tools with dependencies. Even if we discount the web server (nginx or apache?), it includes things like the core "database" (whisper), the event listener (carbon, which in itself is complex depending on your setup), the graphic and processing libraries, and then graphite which is a pretty involved django app with its own sub-components.
So when you say graphite, it's really a full-blown system with lots of moving parts that need to fit in together. I can't think of an equivalent example in the rails world, but any rails app with a db, caching layer, and a few other external components won't be much easier to get set up and running.
However, when dealing with projects that are closer to pure python, and/or less complicated, workon proj && pip install < requirements.txt has almost never failed me.
More and more I find myself moving to Ansible. So good.