Ruploy
If you are managing Rack applications on your server and use RVM to work with several versions of Ruby, that you use either Passenger-Standalone or Thin, Ruploy can help you.
Ruploy can generate init.d scripts to start/restart/stop your Rack applications like any service.
Installation
gem install ruploy
Usage
Ruploy comes with two commands, generate
and deploy
.
Generate
The generate
command is the one in charge of generating init.d scripts. It
take one parameter which is the name of the script you want to create. All other
parameters will be given to the server script as options.
You can pass several options to generate
. If an option is missing, ruploy will
enter interactive mode to ask you what it needs. If you want to use the default
values for the options you didn’t provided, use the --use-defaults
option.
--name NAME
Name of your application (default: current directory name)--directory PATH
Root path of the application (default: current directory)--address HOST
Bind to HOST address (default: 127.0.0.1)--port NUMBER
Use the given port number (default: 3000)--environment ENV
Framework environment (default: production)--user USERNAME
User to run as. Ignored unless running as root (default: www-data)--log-file FILENAME
Where to write log messages (default: /var/log/rack-$PROCNAME-$PORT.log)--pid-file FILENAME
Where to store the PID file (default: /var/lock/rack-$PROCNAME-$PORT)--server-type SERVER
Server type, can be “thin” or “passenger” (default: thin)--dependencies DEPS
Dependencies of the init script (default: apache2)--independent
Print the generic code in the file instead of including it--use-defaults
Do not ask for missing informations and use default values
Here is an example of ruploy generate
usage :
$ ruploy generate my-script \
--name MyApp \
--directory /path/to/my/app \
--address 0.0.0.0 \
--port 4242 \
--environment development \
--user some-user \
--log-file /var/log/myapp.log \
--pid-file /var/lock/myapp \
--server-type passenger \
--dependencies "apache2 mysql"
We could do exactly the same thing with the interactive mode (hitting <return>
will use the default value) :
$ ruploy generate my-script
name |ruploy| MyApp
address |127.0.0.1| 0.0.0.0
port |3000| 4242
directory |/home/simonc/ruby/ruploy| /path/to/my/app
environment |production| development
log_file |/var/log/rack-$PROCNAME-$PORT.log| /var/log/myapp.log
pid_file |/var/lock/rack-$PROCNAME-$PORT| /var/lock/myapp
user |www-data| some-user
dependencies |apache2| apache2 mysql
server_type |thin| passenger
options |--daemonize|
You may have notice the options
question. You can pass here any additionnal
option, it will be passed to the server commande (passenger or thin). Any
argument on the command-line (except for the first one) will be added to this
list.
The two previous examples would generate the following init.d script :
#! /bin/sh
### BEGIN INIT INFO
# Provides: myapp
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: apache2 mysql
# Should-Stop: apache2 mysql
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/Stop MyApp
# Description: Manage the actions related to the passenger instance of MyApp
# you can use start, stop, restart and status
### END INIT INFO
NAME="MyApp"
PROCNAME="myapp"
DIRECTORY="/path/to/my/app"
ADDRESS="0.0.0.0"
PORT="4242"
ENVIRONMENT="development"
USER="some-user"
LOGFILE="/var/log/myapp.log"
PIDFILE="/var/lock/myapp"
OPTIONS="--daemonize"
SERVER="passenger"
. "/Users/happynoff/.rvm/gems/ruby-1.9.2-p290@ruploy/gems/ruploy-0.0.1/data/ruploy-base.sh"
If you just want to change some variables but not all, use the --use-defaults
option :
$ ruploy --name HelloWorld --directory /some/path --use-defaults
Deploy
The deploy
command links your script in /etc/init.d
and then calls
update-rc.d
.
It takes two parameters. The first one is the script name, the second is the service name you want to use and is optional :
$ ruploy deploy my-script service-name
Deploying service-name... [OK]
$ ruploy deploy my-script
Deploying my-script... [OK]
Contribution
Feel free to fork Ruploy and make pull requests !
Raise issues if you have any problem or feature requests.