This is a guest blog post for Geeklist by Charlie Key, CEO of Modulus
One of the major hiccups for most new projects is getting something out there. There is bootstrapping to configure, databases to start up, and various network concerns such as hosting. Not only that, but you have to get all these pieces working smoothly together. These are the headaches Meteor tries to help solve.
What is it?
So Meteor is a framework that works pretty similar to Ruby on Rails. It bootstraps a lot of work required for a real-time application, from the database connection all the way up to the client-side websockets. Of course this makes it extremely popular, especially for projects that want to get up and running quickly.
Telescope is a pretty cool social news app like Reddit that updates as things are added. A great use of Meteor’s real-time features. Of course you can build more traditional websites, like the one for the Adventurize service. However, the real-time features come in handy in a lot of cases, especially if you need video streams like CodersTV. All of these are built with Meteor and are awesome examples of things you can build.
Meteor is obviously very popular and it is technically a Node.js application when said and done, so it is obvious that it should support production level applications. However, Meteor sets up their applications slightly differently than your average Node.js application, there are a few things that need to be considered before throwing Meteor applications across the web all willy-nilly.
The first issue that is quite common is performance. It is true that performance is only as good as the machine you run things on, but with any monolithic solution Meteor can be quite a resource hog. This would not be too much of an issue, but it seems Meteor can be quite difficult to horizontally scale due to its current mechanism to update other instances. I hear on the grape vine that these will be addressed in the 1.0 release though.
The largest hurdle standing in the way is Meteor’s smart packages. Not necessarily the smart packages themselves, but the way Meteor handles them as dependencies. Meteor uses its own definition format for defining dependencies and metadata instead of a package.json file. This means that any standard way of setting up and running Node.js applications will not work. Even the built in bundling will not convert the application into something you can run using just Node.js. This makes it extremely difficult to run Meteor applications on most PaaS providers, and It is pretty safe to say if you are using Meteor to make development faster you will want to use a PaaS to handle servers for you.
The solution comes in the form of a command line tool called demeteorizer. Utilizing some built in Meteor operations and a little brute force, it takes a Meteor application and converts it to a more standard Node.js application, package.json file and all. This means that any Meteor application can be converted and run on any Node.js hosting provider.
Demeteorizer was actually created by Modulus. Recently they have added demeteorizer integration into their CLI, so you can actually deploy Meteor applications to their PaaS just as simply as any other Node.js application. This brings the process full circle. Meteor gives you a way to quickly and easily built rich real-time applications, and Modulus makes it easy to get those applications out to the world.