I live in the sometimes sunny Brighton (it's in the south of the UK, for those across the pond). The south coast is definitely my favourite place to be, but I spent some time on the outskirts of London whilst at University. I'm starting to focus on my own company Left Logic. It's a web development company with strong focus in usability, accessibility, clean design and powerful bespoke applications. Remy is a DZone MVB and is not an employee of DZone and has posted 46 posts at DZone. You can read more from them at their website. View Full User Profile

Development Trick: Auto-updating & Auto-reloading

06.25.2012
| 1975 views |
  • submit to reddit

For the upgrade of JS Bin to version 3 (an open beta), the whole code base is in the process of being rewritten to run as a Node.js process (whilst still working as a PHP application).

What’s neat is I’ve got it to automatically pull the latest changes from github and automatically restart my Node process.

I don’t claim this to be particularly clever, and I’m sure I should be able to trigger a pull on the server as a push happens, but this works fairly well for my development workflow (where the app needs to be online) and is pretty simple – which I like.

Commands

For those like me who don’t care about the detail, here’s exactly what I’m doing in the terminal:

$ cd /WWW/jsbin/
$ screen -S gitpull
$ watch git pull
CTRL+a d
$ screen -S jsbin
$ nodemon .
CTRL+a d

Here’s what’s going on.

Screen

I’m using a linux process called screen which simply put: creates a persistent shell that you can send to the background and retrieve at a later date. This means I can run my processes inside a screen and get them back any time I want if there’s some debugging to do.

Now I’ve got a way of managing two tasks:

  1. Pull from github for any changes
  2. Restart my node process

Once you’re inside screen to detach (and return to your original shell) you use the command sequence CTRL+a d.

Here’s a few extra simple commands:

  • screen -ls will show all the screen processes you’re running and the PIDs they have. You’ll need the PID to reattach the screen
  • screen -r<PID> so in my case: screen -r gitpull will reattach and put me back in to the screen

Auto-updating code

Inside one screen we make use of watch which will keep running a process every 2 seconds. So I “watch” the git pull command.

Obviously this is a bit crap because it’s trying to pull from github to no avail most of the time, but it does mean that when I push new code up, this process will automatically pull.

Which leads me on to restarting…

Auto-reloading

In another screen I’m running the development tool Nodemon to auto restart when any JavaScript files change (which come from the git pull).

So that’s it. Pretty simple.

 

Published at DZone with permission of Remy Sharp, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)