Shotgun
In my previous post I wrote about using the thin web server to run your Rack app locally. This works fine, but there is one issue. If you change your code or configuration you have to restart the server. This is not a big deal, but it do get quite annoying after a while. The solution is a gem called Shotgun.
From the readme:
The shotgun command starts one of Rack’s supported servers (e.g., mongrel, thin, webrick) and listens for requests but does not load any part of the actual application. Each time a request is received, it forks, loads the application in the child process, processes the request, and exits the child process. The result is clean, application-wide reloading of all source files and templates on each request.
As you can see, there in no longer a need to restart your server when code has changed, Shotgun does it for you. Nice.
To get going you need to install the gem
1
$ sudo gem install shotgun
To start the web server, simply type
1
$ shotgun
if the current directory contains the config.ru file, or specify the config file like this
1
$ shotgun config.ru
The output should be something like
1
== Shotgun/Mongrel on http://127.0.0.1:9393/
telling you which server got started and on what port it is listening.
There are some more options available, which you can find by looking at the help
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ shotgun --help
Ruby options:
-e, --eval LINE evaluate a LINE of code
-d, --debug set debugging flags (set $DEBUG to true)
-w, --warn turn warnings on for your script
-I, --include PATH specify $LOAD_PATH (may be used more than once)
-r, --require LIBRARY require the library, before executing your script
Rack options:
-s, --server SERVER server (webrick, mongrel, thin, etc.)
-o, --host HOST listen on HOST (default: 127.0.0.1)
-p, --port PORT use PORT (default: 9393)
-E, --env ENVIRONMENT use ENVIRONMENT for defaults (default: development)
Shotgun options:
-O, --browse open browser immediately after starting
-u, --url URL specify url path (default: /)
-P, --public PATH serve static files under PATH
-h, --help show this message
--version show version