Sunday, February 20, 2011

Don't stray too far from well supported language, tool and platform combinations

I have been doing a lot of customer work lately using Java EE 6 and Glassfish. Fairly nice development environment even if Java EE 6 is heavy on ceremony (but better than J2EE).

Just for fun today I took small play apps I had written in Rails and Clojure + Compojure and shoe-horned them to run on Glassfish. Interesting exercise, but unless there is an overwhelming need to create a custom deployment setup, it is so much better to go with the flow and stick with well crafted and mature setups like
  • Java and Java EE 6
  • Clojure + Compojure running with embedded Jetty behind nginx for serving static assets
  • Rails app hosted on Heroku
  • Web apps written in either Java or Python hosted on AppEngin using the supported frameworks
  • etc.
I must admit that I enjoy hacking not only code but also deployment schemes - enjoy it too much sometimes. Sometimes it is worthwhile, most often not.


Sim said...

Clojure on AppEngine is fairly straight-forward once you get around the blacklisted classes. Luckily, appengine-magic was designed for just that.

Note: not speaking from personal experience. I used a precursor to appengine-magic and simple 'lein compile' with the correct config to host Compojure+Enlive on the AppEngine.

Mark Watson, author and consultant said...

Hello Sim,

I was just mentioning a few "stable combinations" that I use; I know that Clojure has worked for some high profile projects on AppEngine and on Twitter, Charles Nutter pointed out that there are large deployments of JRuby on Glassfish.


MAC said...

Do you know of a write-up on deployment to nginx/Clojure/Compojure - ideally something documenting how to build a server from scratch.

Mark Watson, author and consultant said...

Hello MAC, I just used nginx as a proxy and and added something like "root /home/app1/www" to point to where static assets are stored. The easier alternative would be to just use this example that adds a file handler: