At Palomino Labs, we strive to recommend to our clients frameworks and platforms that are best-suited for their products. As such, we’re constantly evaluating new technologies. Recently, I spent some time checking out Ninefold, a Rails hosting platform that’s aiming to combine the ease and low barrier-to-entry of Heroku with the configurability and power of AWS. Over a couple of days, I branched a simple in-house app and pushed it to Ninefold. I’ve distilled my first impressions down to a few points that I hope are useful the next time you’re looking for a Rails host.
As you’re reading this, it’s important to keep in mind that the Ninefold Rails platform is relatively young and still looking to build out it’s feature set. With that in mind, a big part of what I’m evaluating is potential. There are certainly other, more mature tools that have more features, but what I saw in Ninefold was promising enough to bring it to your attention.
Before you start using Ninefold, you should know that the GUI is going to let you do most of the things you want to do, but it’s going to be in a very no-nonsense kind of way. If you came from the Ninefold home page—which looks very cool with its faceted design—you might be expecting a dashboard with a lot of personality and a cool design. I wouldn’t call any of the dashboard pretty, but any developer is going to be immediately comfortable within it, and it’s going to let you get things done efficiently.
The last time you’ll see any color…
The no-nonsense dashboard
I found that it was fairly straightforward to navigate around the dashboard and I never found myself asking “Where do I go now?”
The one big downside to the web dashboard is that it tends to be slower than I’d like. Every tab is a separate page load, and it doesn’t take long to start feeling the pain of that. That said, I didn’t feel like it was unusably slow and I’m hoping that that’s something that would improve with time.
In my experience, log aggregation is one of those things that seems like it should be easy, but is never as elegant as I would like it to be. I am very happy to say that this is not the case for any Ninefold apps that you might create. Once you deploy an app, the Ninefold dashboard shows a logging section that makes debugging and issue resolution much easier.
The logs for my application along with the sources that are available.
If you look at the screenshots, you’ll notice that the dashboard kindly offers you the ability to string-search whichever logs you’re looking at. When I look at a log, I almost always want to do some kind of search like this, so the fact that it’s built in is pretty cool and it saves me a bunch of munging that I might otherwise have to spend time on. As happy as I was to see a built-in log searcher widget, I was even more excited to see the ability to select sources and hosts of logs to filter by.
When I write to a log, I always feel like I’m trying to walk a fine line between giving enough information to diagnose issues that may crop up and giving so much information that the really important stuff is lost in a sea of garbage. Ninefold makes me feel much better about my logging because they allow you to restrict what you’re looking at to one (or many) of any of a dozen different logging mechanisms. Most of the time, I don’t want to see something like the migration logs, so I can remove those from the list of what is displayed. Being able to filter at a high level like that is really cool and it’s something that I’m going to miss the next time I’m not on Ninefold. It’s worth noting here that you can do the same thing, relative to the servers that you’re deployed on. If you’re running on two different hosts, you can restrict your log view to only look at the host(s) that you’re concerned with. I was running a simple app with just a single host, so I didn’t have reason to use that feature, but I can imagine it being really cool in a high-traffic production environment.
It seems to me like Ninefold is still trying to gain traction (at least here in the States) so they don’t have nearly as big of a user community as some other platforms might. When I started using Ninefold, I was a little worried that this would mean that it would be easier to get stuck on one issue or another. After using it for a while, I think that it would be hard to argue against that unfortunate truth. However, in my experience, the in-app support that Ninefold offers is good enough that the smaller community ends up not even being a factor. I rarely had any problem figuring out what to do next, but when I did get stuck, Ninefold has a little “Chat Now” dialog on the bottom of every page that connects you almost instantaneously with a support person. Normally, I avoid these support chats as much as possible, but the person who answered my support requests was prompt, obviously familiar with the framework, and had the power to solve my problem. I’m no longer worried that I’ll run into any sort of significant blocker that would halt my development.
The thing that I was probably least happy with during my Ninefold experience was the way that you interact with data. I started with an app that one of my coworkers built that tracks the beers that we’re trying at Palomino Labs. The app is new and the existing dataset is relatively small, so I wanted to import the data from the real app into my test app. Unfortunately, it doesn’t seem like there’s a good way to do that from the dashboard. I was able to take a snapshot of the other database without any problem, but I couldn’t find any way to bootstrap my app with that snapshot. I ended up using the Ninefold CLI gem to manually recreate a few important pieces of data (e.g. app user accounts) and then living in a sad reality where my app didn’t have much data.
At this point, I would like to add two caveats to my complaints here. First, like I mentioned above, Ninefold provides a CLI that I didn’t explore much, but that seems like it would be pretty useful. I didn’t try to do any sort of data restoration through that system, instead preferring to use it just like a Rails console. It’s possible that the CLI provides a way to restore database backups, but I was trying to restrict my usage to the dashboard as much as possible. The second caveat is that I mentioned this specific use case to one of the Ninefold developers last time I had a chance to talk with them, and it sounded like this might be on the short-term roadmap. I’m hopeful that the next update to the dashboard includes a means to restore backups.
The first thing that I’ll note about deployment is that it’s extremely easy. If you have a git repo in Github or Bitbucket, Ninefold provides you with a handy little wizard that will create your app in about 30 seconds. It’s easy to deploy from branches, and you can check a box to add post-commit hooks that will automatically redeploy your app whenever you make a change. I never had any problems with the post-commit hooks on this project, but one of my coworkers reported that the hooks stopped working for him mid-development. This is one of the areas that I’m willing to overlook some rough edges because of the new-ness of the platform and I’m fairly confident that this is a piece of functionality that the Ninefold developers are fully on top of.
The big downside to the deployment process was that it seemed to take a fairly long time for me. Due to a few of my own mistakes, I had to redeploy our (small) app 3-4 times in a short timespan, and it seemed like I was waiting about 10-15 minutes for each deploy. I don’t expect anything blazingly fast, but I spent more time waiting on a deployment than I would’ve liked.
At the moment, the Ninefold ecosystem is a little bit young and that shows in the number of add-ons that are available to include in the app. There are a handful of cool-looking modules (e.g. New Relic, SSL, etc.) that you can add to your app with the click of a button, but you’ll need to wait (or roll your own) if you want to use any modules that aren’t on the shortlist. That said, the number of add-ons that ARE available right now is totally reasonable given the age of the platform, and they claim some interesting functionality (like when they set up a New Relic account for you, if you don’t already have one). I’m optimistic that more tools are going to get added as time goes on, so if you have something you need, try reaching out to them.
I have yet to see a Rails hosting platform that is really good at splitting an app into different environments (e.g. staging and production environments for a single logical app) and I didn’t feel like Ninefold did much to solve that problem. I only deployed one version of our app, but when I talked to Hayden about how he solved the environment problem, he told me that he just handles the environments as separate apps. So, we have one app for production and one for staging and there is nothing (except the code) in common between the two. I don’t fault Ninefold in any way here, because I’m not sure how I want these to be related in the interface, but it seems like they could be linked better.
After spending some time with Ninefold, I’m fairly happy with the service. It’s still a young product, but what they have is solid and, even better, they seem to be moving in the right direction. If you have the time, I’d definitely recommend checking it out to see if it fits in your workflow.