How Monkee-Boy Does Deployments

| |

We recently introduced a deployment process here at Monkee-Boy. Previously there was no process and we were limited in our options with being on a shared hosting plan. This changed when we looked to move away from shared hosting and manage our own VPS. We selected Linode as our host and have been in the process of migrating sites. This allowed us to finally look into deployments and figure out what would work best with us.

All our projects are either hosted in private repos on Beanstalk or public repos on GitHub. We thought about doing a simple webhook that would do a git pull on the server with each tag. This would have been extremely easy to setup and pretty simple for the team to learn. However, we already have a build process with gulp, generate with jekyll at times, and run database migrations in CakePHP and Laravel. Why shouldn’t we include those in our deployment process?

Enter Capistrano. Although we primarily use PHP instead of Ruby, Capistrano turned out to be the best solution for us. John Hoover already had some experience with it and after diving into the documentation and source code, I loved it. Immediately I had a picture in my head of how I wanted our deployments to work. Top priority was making sure it stayed simple. I didn’t want to introduce the team to a complicated process. We needed to easily generate deploy config files depending on the type of project we were working on, have it send out HipChat notifications on successful or failed deployment, and let it handle our build process.

To accomplish this we use a set of default deployment config templates depending on the type of project; Laravel, Monkee-Boy CMS, WordPress, Jekyll, etc. This lets the team quickly set up the project for deployments. These templates weren’t fast enough for me though. I instead turned to Yeoman and created a generator to speed things up. Running yo mboy-deploy starts by asking a few simple questions about your project; project name, domain, git url, uses WordPress, and then whether it needs to handle npm, bower, gulp, Jekyll, migrations, and more. Based on those quick questions it creates your deploy config files that in most cases require zero modifications before you can cap production deploy.

mBoy Deploy Generator

HipChat is amazing and we use it a lot at Monkee-Boy. We wanted notifications of deployments to show up in the Dev Team room. This was made easy with the official HipChat API gem. However, I found the Capistrano wrapper to be too limiting with what I wanted to do so I just used the gem and setup our own notifications for a successful deploy, a successful rollback, and a failed deploy. The notification message includes what project and environment was deployed, the status of it, who triggered the deployment, and has the ability to let you include a message with it for why you deployed.

Deploy HipChat Notifications

The default Capistrano messages while deploying aren’t all that pretty. Of course this isn’t a big deal for most but if I’m going to spend so much time in terminal and my editor, I like things to look good. I changed Capistrano’s log level to only errors and used their tasks to write our own messages for each step a deployment does, including install npm modules, updating bower components, running database migrations, creating the git tag, etc.

After making all these customizations directly in the deployment configs I realized that I couldn’t easily make changes or fixes to the messages, notifications, etc. A simple Ruby gem was the obvious choice. It would allow us to house our private API keys, default variables for our server, and the custom deployment messages. It’s a private gem on gemfury but it’s also available on our GitHub to reference without our private keys.

mBoy Capistrano Deployments

What the deployment does will vary per project but for the most part it handles updating npm modules, updating bower components, running database migrations, seeding a database if needed, and automatically creating a git tag on every deployment. The overall process has considerably sped up our deployments, encourages better testing on your local environment, and keeps changes from being made directly on the server to a production environment.

As great as it has been, there are a few things we are still trying to figure out. The primary one is not being able to make commits directly from the server. Before you say anything, I know it’s a bad idea and shouldn’t happen. We do have a few use cases that it makes sense for though. Those clients who have FTP access directly to their files and legacy clients on a CMS that doesn’t use a database but instead actually modifies the files directly on the server for content changes. In both of these cases we would want to have a cronjob that adds, commits, and pushes to the git repo any changes the client made a few times daily. We would also include a task in Capistrano to sync manually before starting work locally on a project. This doesn’t seem to work with how Capistrano organizes deployments and the barebones git repo on the server.

This is all still new for us but so far it’s been great. The team was super excited to start deploying and it has been a huge improvement. I’m still tweaking our configs and always looking into how we can be more efficient. We would much rather spend our time coding than uploading files or dealing with a complicated deploy process. My only complaint is why didn’t I start using Capistrano sooner?!

Continue reading

Monkee-Boy Gets a New Site

| |


The entire Monkee-Boy troop has been hard at work the past year on our own redesign and we are proud to say it is now live! We wanted our site to showcase our talented team, our amazing clients, and of course our culture. This was an intense and fun collaboration where every person on the team touched the site in some aspect.

It’s really hard to pick my favorite part of the new site so I’ll pick three instead. The Troop page is great. It shows off the company culture, our personalities, and how much fun we have working with each other. The portfolio page was also fun to see come together as a great way to showcase our responsive sites. Finally the blog is a major highlight of the new site. We have huge plans for the blog moving forward and the new design gives us the flexibility to do everything we want.

I’ve never had more fun on a project and it’s all thanks to the team. We are extremely excited to show off the new site and really hope you enjoy browsing it. Check it out at

Continue reading


Automating Style Guide-Driven Development


Varya Stepanova & Juuso Backman:

The SC5 Style Guide Generator builds a living style guide from style source code. It provides a command line interface and both Gulp and Grunt build tasks wrapped in a single npm package. In the simplest use case, the user defines which files are to be processed and to which directory the generated files should be written.

At Monkee-Boy we are exploring using style guides for all our projects. I’m excited to jump more into KSS and seeing how it works out for us. This SC5 Style Guide Generator looks awesome in automating this process and keeping style guides up to date as a project evolves over time.

A not so covert stutterer.

| |

Brian Wood recently posted about his life as a stutterer, and I haven’t been able to stop thinking about it since. How he felt as a kid, how he handles it as an adult — everything he said I could easily say “that’s me.” His post was full of things that I wish I had told people. But, ultimately, Brian’s post was about how he grew to be at peace with stuttering. I can’t stop thinking about it because, for some reason, I’m still not.

My stuttering is something I don’t speak of outside my house. I try every day to hide it from friends, co-workers, the drive-thru person, and anybody else I might meet. Brian touched on being a “covert stutterer,” and how a person works to achieve that protection. This includes a fairly long list of words that I know I can’t say and have to avoid at all cost. Some words I just can’t use at the start of a sentence because of their first syllable. Instead, I have to add a word or two in front of it to get the sentence started for me. I need momentum. I have an extremely hard time with numbers as well — “eight” more than any other for some reason. I know when I go to order food there are some things that I’ll never be able to order unless my wife Melissa is there to do it for me.

It can be very frustrating knowing you never get a chance to say what you want.

I know when I carry a conversation I have to stay far enough ahead in my mind with what I’m saying to know when to slow down and avoid a word. I know that my choice of vocabulary and frequent long pauses can come off as strange when I’m really just struggling to contain my stutter.

I’ve stuttered my entire life. I was in speech therapy from grade school to high school, where I learned plenty of techniques to overcome or manage my stutter on a daily basis, but in the end nothing worked. Stuttering as a child, you learn pretty fast to laugh at yourself when being mocked. You also learn to make fun of yourself first, before anyone else can, because somehow that’s better. Some days I can hide my stutter without an issue; granted those days tend to be when Melissa is around to do most of the talking for me. Other days, I just want to avoid the world.

I’ve spent my entire life mastering the skills of avoiding social contact.

I have severe social anxiety, which I try to play off when I talk about not wanting to be around any size group of people – large or small. The past few years I have attempted to put myself in social situations that would require me to talk to people, but because I’ve spent my entire life mastering skills to avoid social contact my instincts often take over, and I tend to shy away from eye contact, to keep my head down, my body turned slightly away from the people nearby. I stand in the corner, or near the door, pretend to be texting, and finally act out answering a phone call, walk outside and don’t come back…rinse and repeat.

What Brian shared got me thinking about why I’m not at peace with my stutter. I’m almost thirty years old, have dealt with it my entire life, and yet I still try to hide it and hope one day I wake up and it’s gone. That is not going to happen. Coming to terms with it and not having it hold me back from at least trying things that I actively avoid can happen.

“Because, at this point in my life, my stutter isn’t going away. I kind of don’t want it to. It’s as much of who I am as anything else. I’ve lived with it longer than anything else I have going on, so sometimes I think it’s the most defining thing about me.” -Brian Wood

I started with how much Brian’s post made me say “that’s me.” I felt that way through his entire post until the quote above, which appeared at the end. I don’t feel like that, but I want to.

Originally posted to medium.

Continue reading