There is a one-liner on the internet that will start a local web server, for serving all the static files in your current directory:

$ python -m SimpleHTTPServer 8080

Or with Python 3:

$ python3 -m http.server

Rubyists generally do not want to rely on Python, so there is a Ruby equivalent:

$ ruby -run -e httpd . -p 8080

This will fire up a very simple server, written in Ruby, using WEBrick under the hood!

It also takes some more options, see at bottom of this post for a listing of available ones.

How does this work and what does it do exactly? First of all, what does ruby -run mean? The answer might be surprising: It could be rewritten as:

$ ruby -require "un" -e "httpd" . -p 8080

The -e option directly executes the ruby code given, and -r is the short version of --require . So it requires "un", which happens to be included in Ruby's standard library¹. It was written by Hirofumi WATANABE (eban), a long-time Ruby contributor and code golf star. un.rb s goal is to provide:

# Utilities to replace common UNIX commands in Makefiles etc

¹ The same is possible for requiring rubygems

Let's see, what else is included:

# ruby -run -e cp -- [OPTION] SOURCE DEST # ruby -run -e ln -- [OPTION] TARGET LINK_NAME # ruby -run -e mv -- [OPTION] SOURCE DEST # ruby -run -e rm -- [OPTION] FILE # ruby -run -e mkdir -- [OPTION] DIRS # ruby -run -e rmdir -- [OPTION] DIRS # ruby -run -e install -- [OPTION] SOURCE DEST # ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE # ruby -run -e touch -- [OPTION] FILE # ruby -run -e wait_writable -- [OPTION] FILE # ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION] # ruby -run -e httpd -- [OPTION] DocumentRoot # ruby -run -e help [COMMAND]

Besides httpd, you mostly get FileUtils based implementations of common unix tools,: cp , ln , mv , rm , mkdir , rmdir , install , chmod , and touch .

There are two more commands included, which don't fit into this unix category: mkmf, which you can use to create the Makefile for a Ruby C extension and wait_writable, which allows you to continuously try to open a file in writable mode.

-run Reference

What follows is a reference of all un commands. Also checkout the integrated help with:

$ ruby -run -e help COMMAND

Copy Files

$ ruby -run -e cp SOURCE DEST [OPTIONS]

Argument Description SOURCE File to copy DEST Where to copy the file

Option Description -p Preserve file attributes if possible -r Copy directories recursively -v Verbose mode (print executed shell command)

Create Symlink

$ ruby -run -e ln TARGET LINK_NAME [OPTIONS]

Argument Description TARGET File to create symlink from LINK_NAME Where to create the symlink

Option Description -s Make symbolic links instead of hard links -f Overwrite files, which already exists at destination -v Verbose mode (print executed shell command)

Move File

$ ruby -run -e mv SOURCE DEST [OPTIONS]

Argument Description SOURCE File to move DEST Where to move the file

Option Description -v Verbose mode (print executed shell command)

Remove File

$ ruby -run -e rm FILE [OPTIONS]

Argument Description FILE File(s) to remove

Option Description -f Do nothing if file does not exist -r Remove the contents of directories recursively -v Verbose mode (print executed shell command)

Create Directory

$ ruby -run -e mkdir DIRS [OPTIONS]

Argument Description DIRS Director(y/ies) to create

Option Description -p Don't fail if directory already exists

Create all directories necessary -v Verbose mode (print executed shell command)

Remove Directory

$ ruby -run -e rmdir DIRS [OPTIONS]

Argument Description DIRS Director(y/ies) to remove

Option Description -p Also remove directory's ancestors -v Verbose mode (print executed shell command)

Copy Files and Set Attributes

$ ruby -run -e install SOURCE DEST [OPTIONS]

Argument Description SOURCE File to copy DEST Where to copy the file

Option Description -p Apply access/modification times of SOURCE files to corresponding destination files -m Set permission mode (as in chmod), instead of 0755 -v Verbose mode (print executed shell command)

Change File Mode

$ ruby -run -e chmod OCTAL-MODE FILE [OPTIONS]

Argument Description OCTAL-MODE File mode to set as octal number FILE File(s) to operate on

Option Description -v Verbose mode (print executed shell command)

$ ruby -run -e touch FILE [OPTIONS]

Argument Description FILE File(s) to touch

Option Description -v Verbose mode (print executed shell command)

Wait until File gets Writable

$ ruby -run -e wait_writable FILE [OPTIONS]

Argument Description FILE File(s) to wait for

Option Description -n RETRY Count how often to retry -w SEC Time to wait between retries (in seconds) -v Verbose mode (print access errors)

Make Makefile

$ ruby -run -e mkmf EXTNAME [OPTIONS]

Argument Description EXTNAME Extension name

Option Description -d ARGS Run dir_config -h ARGS Run have_header -l ARGS Run have_library -f ARGS Run have_func -v ARGS Run have_var -t ARGS Run have_type -m ARGS Run have_macro -c ARGS Run have_const –vendor Install to vendor_ruby

Serve Static Files via HTTP

$ ruby -run -e httpd DOCUMENT_ROOT [OPTIONS]

Argument Description DOCUMENT_ROOT Directory to serve

Option Short Description Example –bind-address=ADDR -b IP address to bind to -b 127.0.0.1 –port=NUM -p Port number to listen on -p 8080 –max-clients=MAX -m Max number of simultaneous clients -m 2 –temp-dir=DIR -t Temporary directory to use -t /tmp –do-not-reverse-lookup -d Disable reverse lookup -d –request-timeout=SECOND -r Request timeout (in seconds) -r 2 –http-version=VERSION HTTP version --http-version=1.0 -v Start WEBrick in verbose mode -v

Further Reading

More Idiosyncratic Ruby