mina-rails-tools 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +11 -0
- data/Rakefile +1 -0
- data/lib/mina/extras/apt.rb +66 -0
- data/lib/mina/extras/brew.rb +8 -0
- data/lib/mina/extras/extra.rb +111 -0
- data/lib/mina/extras/gem.rb +64 -0
- data/lib/mina/extras/god.rb +67 -0
- data/lib/mina/extras/local.rb +12 -0
- data/lib/mina/extras/methods.rb +194 -0
- data/lib/mina/extras/mysql.rb +12 -0
- data/lib/mina/extras/nginx.rb +44 -0
- data/lib/mina/extras/osx.rb +6 -0
- data/lib/mina/extras/platform.rb +29 -0
- data/lib/mina/extras/puma.rb +5 -0
- data/lib/mina/extras/rails.rb +11 -0
- data/lib/mina/extras/rainbows.rb +63 -0
- data/lib/mina/extras/redis.rb +9 -0
- data/lib/mina/extras/system.rb +11 -0
- data/lib/mina/extras/templates/global.god.erb +23 -0
- data/lib/mina/extras/templates/god.sh.erb +39 -0
- data/lib/mina/extras/templates/nginx.conf.erb +33 -0
- data/lib/mina/extras/templates/unicorn.god.erb +69 -0
- data/lib/mina/extras/templates/unicorn.rb.erb +41 -0
- data/lib/mina/extras/templates/unicorn_init.sh.erb +66 -0
- data/lib/mina/extras/ubuntu.rb +103 -0
- data/lib/mina/extras/unicorn.rb +86 -0
- data/lib/mina/extras/version.rb +5 -0
- data/lib/mina/extras.rb +10 -0
- data/mina-rails-tools.gemspec +33 -0
- data/samples/osx/config/deploy/shared/global.god.erb +23 -0
- data/samples/osx/config/deploy/shared/god.sh.erb +41 -0
- data/samples/osx/config/deploy.rb +46 -0
- data/samples/osx/prepare.sh +7 -0
- data/samples/ubuntu/config/deploy/shared/global.god.erb +23 -0
- data/samples/ubuntu/config/deploy/shared/god.sh.erb +41 -0
- data/samples/ubuntu/config/deploy.rb +51 -0
- data/samples/ubuntu/prepare.sh +24 -0
- metadata +127 -0
@@ -0,0 +1,63 @@
|
|
1
|
+
require "mina/extras"
|
2
|
+
|
3
|
+
namespace :rainbows do
|
4
|
+
|
5
|
+
desc "Rainbows: Parses config file and uploads it to server"
|
6
|
+
task :upload => [:'upload:config', :'upload:script']
|
7
|
+
|
8
|
+
namespace :upload do
|
9
|
+
desc "Parses Rainbows config file and uploads it to server"
|
10
|
+
task :config do
|
11
|
+
upload_shared_file("rainbows.rb")
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Parses Rainbows control script file and uploads it to server"
|
15
|
+
task :script do
|
16
|
+
upload_shared_file("rainbows_init.sh")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Unicron: startup"
|
21
|
+
task :defaults do
|
22
|
+
invoke :sudo
|
23
|
+
queue echo_cmd %{sudo chown root:root /etc/init.d/rainbows-#{app!}}
|
24
|
+
queue echo_cmd %{sudo chmod u+x /etc/init.d/rainbows-#{app!}}
|
25
|
+
queue echo_cmd "sudo update-rc.d rainbows-#{app!} defaults"
|
26
|
+
end
|
27
|
+
|
28
|
+
task :log do
|
29
|
+
queue %{tail -f "#{deploy_to!}/#{shared_path}/log/rainbows.log" -n 200}
|
30
|
+
end
|
31
|
+
|
32
|
+
task :err_log do
|
33
|
+
queue %{tail -f "#{deploy_to!}/#{shared_path}/log/rainbows.error.log" -n 200}
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "Rainbows: Link script files"
|
37
|
+
task :link do
|
38
|
+
invoke :sudo
|
39
|
+
extra_echo("Rainbows: Link script file")
|
40
|
+
queue echo_cmd %{sudo cp '#{deploy_to}/shared/config/rainbows_init.sh' '/etc/init.d/rainbows-#{app!}'}
|
41
|
+
|
42
|
+
invoke :"rainbows:defaults"
|
43
|
+
end
|
44
|
+
|
45
|
+
desc "Start rainbows"
|
46
|
+
task :start do
|
47
|
+
extra_echo("Rainbows: Start")
|
48
|
+
queue echo_cmd "/etc/init.d/rainbows-#{app!} start"
|
49
|
+
end
|
50
|
+
|
51
|
+
desc "Stop rainbows"
|
52
|
+
task :stop do
|
53
|
+
extra_echo("Rainbows: Stop")
|
54
|
+
queue echo_cmd "/etc/init.d/rainbows-#{app!} stop"
|
55
|
+
end
|
56
|
+
|
57
|
+
desc "Restart rainbows using 'upgrade'"
|
58
|
+
task :restart do
|
59
|
+
extra_echo("Rainbows: Restart")
|
60
|
+
queue echo_cmd "/etc/init.d/rainbows-#{app!} upgrade"
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
task :health do
|
2
|
+
queue 'ps aux | grep -v grep | grep -v bash | grep -e "bin\/god" -e "unicorn_rails" -e "mongod" -e "nginx" -e "redis" -e "STAT START TIME COMMAND" -e "bash"'
|
3
|
+
end
|
4
|
+
|
5
|
+
task :uptime do
|
6
|
+
queue 'uptime'
|
7
|
+
end
|
8
|
+
|
9
|
+
task :gp do
|
10
|
+
queue echo_cmd "ps aux | grep #{ENV["p"]}"
|
11
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#God::Contacts::Email.defaults do |d|
|
2
|
+
# d.from_email = 'god@test'
|
3
|
+
# d.from_name = 'God'
|
4
|
+
# d.delivery_method = :sendmail
|
5
|
+
#end
|
6
|
+
|
7
|
+
#God.contact(:email) do |c|
|
8
|
+
# c.name = 'Foo Bar'
|
9
|
+
# c.group = 'me'
|
10
|
+
# c.to_email = 'admin@test.com'
|
11
|
+
#end
|
12
|
+
|
13
|
+
# God::Contacts::Jabber.defaults do |d|
|
14
|
+
# d.host = "jabber.synbioz.com"
|
15
|
+
# d.from_jid = "foo@synbioz.com"
|
16
|
+
# d.password = "bar"
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# God.contact(:jabber) do |c|
|
20
|
+
# d.to_jid = "alfuken@gmail.com"
|
21
|
+
# end
|
22
|
+
|
23
|
+
God.load "<%= god_path %>/conf/*.god"
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
#
|
3
|
+
# God
|
4
|
+
#
|
5
|
+
# chkconfig: - 85 15
|
6
|
+
# description: start, stop, restart, status for God
|
7
|
+
#
|
8
|
+
|
9
|
+
RETVAL=0
|
10
|
+
GOD_PID="<%= god_pid_path %>/god.pid"
|
11
|
+
GOD_LOG="<%= god_log_path %>/god.log"
|
12
|
+
GOD_CONF="<%= god_path %>/global.god"
|
13
|
+
GOD_BIN="/usr/local/bin/god"
|
14
|
+
|
15
|
+
case "$1" in
|
16
|
+
start)
|
17
|
+
$GOD_BIN -c $GOD_CONF -P $GOD_PID -l $GOD_LOG
|
18
|
+
RETVAL=$?
|
19
|
+
;;
|
20
|
+
stop)
|
21
|
+
kill `cat $GOD_PID`
|
22
|
+
RETVAL=$?
|
23
|
+
;;
|
24
|
+
restart)
|
25
|
+
kill `cat $GOD_PID`
|
26
|
+
$GOD_BIN -c $GOD_CONF -P $GOD_PID -l $GOD_LOG
|
27
|
+
RETVAL=$?
|
28
|
+
;;
|
29
|
+
status)
|
30
|
+
$GOD_BIN status
|
31
|
+
RETVAL=$?
|
32
|
+
;;
|
33
|
+
*)
|
34
|
+
echo "Usage: god {start|stop|restart|status}"
|
35
|
+
exit 1
|
36
|
+
;;
|
37
|
+
esac
|
38
|
+
|
39
|
+
exit $RETVAL
|
@@ -0,0 +1,33 @@
|
|
1
|
+
upstream unicorn-<%= app %> {
|
2
|
+
server unix:/tmp/unicorn.<%= app! %>.socket fail_timeout=0;
|
3
|
+
}
|
4
|
+
|
5
|
+
# <%= app %> Server
|
6
|
+
server {
|
7
|
+
listen <%= nginx_port %><%= ' default' if nginx_default %>;
|
8
|
+
server_name <%= domain %>;
|
9
|
+
|
10
|
+
root <%= deploy_to %>/<%= current_path %>/public;
|
11
|
+
|
12
|
+
gzip on;
|
13
|
+
gzip_types text/plain text/xml application/xml application/xml+rss
|
14
|
+
text/css text/javascript application/javascript application/json;
|
15
|
+
|
16
|
+
try_files $uri/index.html $uri @unicorn;
|
17
|
+
location @unicorn {
|
18
|
+
proxy_pass http://unicorn-<%= app! %>;
|
19
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
20
|
+
proxy_set_header X-Real-IP $remote_addr;
|
21
|
+
proxy_set_header Host $http_host;
|
22
|
+
proxy_redirect off;
|
23
|
+
proxy_intercept_errors on;
|
24
|
+
expires -1;
|
25
|
+
}
|
26
|
+
|
27
|
+
error_page 500 502 503 504 /500.html;
|
28
|
+
error_page 403 /403.html;
|
29
|
+
error_page 404 /404.html;
|
30
|
+
|
31
|
+
client_max_body_size 50M;
|
32
|
+
keepalive_timeout 10;
|
33
|
+
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# http://unicorn.bogomips.org/SIGNALS.html
|
2
|
+
|
3
|
+
rails_env = "production"
|
4
|
+
rails_root = "<%= "#{deploy_to!}/#{current_path!}" %>"
|
5
|
+
shared_root = "<%= "#{deploy_to!}/#{shared_path!}" %>"
|
6
|
+
config = "#{shared_root}/unicorn.rb"
|
7
|
+
unicorn_pid = "<%= "#{deploy_to!}/#{shared_path!}/pids/unicorn.pid" %>"
|
8
|
+
|
9
|
+
# God.pid_file_directory = File.join("<%= deploy_to! %>", "shared", "pids")
|
10
|
+
God.watch do |w|
|
11
|
+
w.name = "unicorn_<%= "#{app!}" %>"
|
12
|
+
w.interval = 30.seconds # default
|
13
|
+
|
14
|
+
w.start = "cd #{rails_root} && /usr/local/bin/bundle exec unicorn_rails -D -c #{config} -E #{rails_env}"
|
15
|
+
|
16
|
+
# QUIT gracefully shuts down workers
|
17
|
+
w.stop = "kill -QUIT `cat #{unicorn_pid}`"
|
18
|
+
|
19
|
+
# USR2 causes the master to re-create itself and spawn a new worker pool
|
20
|
+
w.restart = "kill -USR2 `cat #{unicorn_pid}`"
|
21
|
+
|
22
|
+
w.start_grace = 30.seconds
|
23
|
+
w.restart_grace = 30.seconds
|
24
|
+
# w.pid_file = "#{rails_root}/tmp/pids/unicorn.pid"
|
25
|
+
w.pid_file = unicorn_pid
|
26
|
+
|
27
|
+
w.uid = "<%= user! %>"
|
28
|
+
w.gid = "<%= group! %>"
|
29
|
+
|
30
|
+
w.behavior(:clean_pid_file)
|
31
|
+
|
32
|
+
w.start_if do |start|
|
33
|
+
start.condition(:process_running) do |c|
|
34
|
+
c.interval = 10.seconds
|
35
|
+
c.running = false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
w.restart_if do |restart|
|
40
|
+
restart.condition(:memory_usage) do |c|
|
41
|
+
c.above = 300.megabytes
|
42
|
+
c.times = [3, 5] # 3 out of 5 intervals
|
43
|
+
end
|
44
|
+
|
45
|
+
restart.condition(:cpu_usage) do |c|
|
46
|
+
c.above = 80.percent
|
47
|
+
c.times = 5
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# lifecycle
|
52
|
+
w.lifecycle do |on|
|
53
|
+
on.condition(:flapping) do |c|
|
54
|
+
c.to_state = [:start, :restart]
|
55
|
+
c.times = 5
|
56
|
+
c.within = 5.minute
|
57
|
+
c.transition = :unmonitored
|
58
|
+
c.retry_in = 10.minutes
|
59
|
+
c.retry_times = 5
|
60
|
+
c.retry_within = 2.hours
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# w.transition(:up, :start) do |on|
|
65
|
+
# on.condition(:process_exits) do |c|
|
66
|
+
# c.notify = 'me'
|
67
|
+
# end
|
68
|
+
# end
|
69
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
rails_root = "<%= "#{deploy_to!}/#{current_path!}" %>"
|
2
|
+
rails_env = "<%= rails_env || "production" %>"
|
3
|
+
pid_file = "<%= "#{deploy_to!}/#{shared_path}" %>/pids/unicorn.pid"
|
4
|
+
socket_file= "/tmp/unicorn.<%= app! %>.socket"
|
5
|
+
log_file = "<%= "#{deploy_to!}/#{shared_path}" %>/log/unicorn.log"
|
6
|
+
err_log = "<%= "#{deploy_to!}/#{shared_path}" %>/log/unicorn.error.log"
|
7
|
+
old_pid = pid_file + '.oldbin'
|
8
|
+
|
9
|
+
timeout 60
|
10
|
+
worker_processes <%= unicorn_workers || 2 %>
|
11
|
+
|
12
|
+
# Listen on a Unix data socket
|
13
|
+
listen socket_file, :backlog => 2048
|
14
|
+
pid pid_file
|
15
|
+
|
16
|
+
stderr_path err_log
|
17
|
+
stdout_path log_file
|
18
|
+
|
19
|
+
preload_app true
|
20
|
+
|
21
|
+
GC.copy_on_write_friendly = true if GC.respond_to?(:copy_on_write_friendly=)
|
22
|
+
|
23
|
+
before_exec do |server|
|
24
|
+
ENV["BUNDLE_GEMFILE"] = "#{rails_root}/Gemfile"
|
25
|
+
end
|
26
|
+
|
27
|
+
before_fork do |server, worker|
|
28
|
+
# Using this method we get 0 downtime deploys.
|
29
|
+
if File.exists?(old_pid) && server.pid != old_pid
|
30
|
+
begin
|
31
|
+
Process.kill("QUIT", File.read(old_pid).to_i)
|
32
|
+
rescue Errno::ENOENT, Errno::ESRCH
|
33
|
+
# someone else did our job for us
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
after_fork do |server, worker|
|
39
|
+
child_pid = server.config[:pid].sub('.pid', ".#{worker.nr}.pid")
|
40
|
+
system("echo #{Process.pid} > #{child_pid}")
|
41
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
set -e
|
3
|
+
|
4
|
+
AS_USER=deploy
|
5
|
+
TIMEOUT=60
|
6
|
+
APP_ROOT="<%= "#{deploy_to!}" %>"
|
7
|
+
PID_PATH="<%= "#{deploy_to!}/#{shared_path!}/pids" %>"
|
8
|
+
PID="$PID_PATH/unicorn.pid"
|
9
|
+
ENVIRONMENT="<%= rails_env || "production" %>"
|
10
|
+
CONFIG="$APP_ROOT/<%= "#{shared_path!}/unicorn.rb" %>"
|
11
|
+
UARGS="-D -c $CONFIG -E $ENVIRONMENT"
|
12
|
+
CMD="cd $APP_ROOT/<%= current_path! %> && bundle exec unicorn_rails $UARGS"
|
13
|
+
action="$1"
|
14
|
+
#set -u
|
15
|
+
|
16
|
+
old_pid="$PID.oldbin"
|
17
|
+
|
18
|
+
sig () {
|
19
|
+
test -s "$PID" && kill -$1 `cat $PID`
|
20
|
+
}
|
21
|
+
|
22
|
+
oldsig () {
|
23
|
+
test -s $old_pid && kill -$1 `cat $old_pid`
|
24
|
+
}
|
25
|
+
|
26
|
+
workersig () {
|
27
|
+
workerpid="$PID_PATH/unicorn.$2.pid"
|
28
|
+
test -s "$workerpid" && kill -$1 `cat $workerpid`
|
29
|
+
}
|
30
|
+
|
31
|
+
case $action in
|
32
|
+
start)
|
33
|
+
sig 0 && echo >&2 "Already running" && exit 0
|
34
|
+
su -c "$CMD" - $AS_USER && echo "start ok" && exit 0
|
35
|
+
;;
|
36
|
+
stop)
|
37
|
+
sig QUIT && echo "stop ok" && exit 0
|
38
|
+
echo >&2 "Not running"
|
39
|
+
;;
|
40
|
+
force-stop)
|
41
|
+
sig TERM && echo "force-stop ok" && exit 0
|
42
|
+
echo >&2 "Not running"
|
43
|
+
;;
|
44
|
+
restart|reload)
|
45
|
+
sig HUP && echo "reloaded OK" && exit 0
|
46
|
+
echo >&2 "Error: start $CMD instead"
|
47
|
+
su -c "$CMD" - $AS_USER
|
48
|
+
;;
|
49
|
+
upgrade)
|
50
|
+
sig USR2 && echo Upgraded && exit 0
|
51
|
+
echo >&2 "Error: start $CMD instead"
|
52
|
+
su -c "$CMD" - $AS_USER
|
53
|
+
;;
|
54
|
+
kill_worker)
|
55
|
+
workersig QUIT $2 && exit 0
|
56
|
+
echo >&2 "Worker not running"
|
57
|
+
;;
|
58
|
+
|
59
|
+
reopen-logs)
|
60
|
+
sig USR1
|
61
|
+
;;
|
62
|
+
*)
|
63
|
+
echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
|
64
|
+
exit 1
|
65
|
+
;;
|
66
|
+
esac
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require "mina/extras"
|
2
|
+
require "mina/extras/local"
|
3
|
+
require "mina/extras/apt"
|
4
|
+
require "mina/extras/gem"
|
5
|
+
|
6
|
+
set :platform, :ubuntu
|
7
|
+
|
8
|
+
def add_user(u)
|
9
|
+
invoke :sudo
|
10
|
+
queue "adduser #{u}"
|
11
|
+
end
|
12
|
+
|
13
|
+
namespace :ubuntu do
|
14
|
+
|
15
|
+
task :before_check do
|
16
|
+
to :before_hook do
|
17
|
+
invoke :"local:check_ssh_key"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
namespace :remote do
|
22
|
+
task :setup do
|
23
|
+
invoke :sudo
|
24
|
+
queue echo_cmd %{mkdir -p ~/.ssh}
|
25
|
+
append_template(ssh_pub_key_path, ".ssh/authorized_keys")
|
26
|
+
end
|
27
|
+
|
28
|
+
task :add_deploy do
|
29
|
+
invoke :sudo
|
30
|
+
add_user("deploy")
|
31
|
+
queue "sudo usermod -a -G www-data deploy"
|
32
|
+
|
33
|
+
queue echo_cmd "sudo mkdir -p /home/deploy/.ssh"
|
34
|
+
queue echo_cmd "sudo touch /home/deploy/.ssh/authorized_keys"
|
35
|
+
append_template(ssh_pub_key_path, "/home/deploy/.ssh/authorized_keys")
|
36
|
+
queue echo_cmd "sudo chown -R deploy:deploy /home/deploy/.ssh"
|
37
|
+
queue echo_cmd "sudo chmod 664 /home/deploy/.ssh/authorized_keys"
|
38
|
+
end
|
39
|
+
|
40
|
+
task :add_ubuntu do
|
41
|
+
invoke :sudo
|
42
|
+
add_user("ubuntu")
|
43
|
+
queue echo_cmd "sudo groupadd admin"
|
44
|
+
queue echo_cmd "sudo usermod -a -G admin ubuntu"
|
45
|
+
queue echo_cmd "sudo mkdir -p /home/ubuntu/.ssh"
|
46
|
+
queue echo_cmd "sudo touch /home/ubuntu/.ssh/authorized_keys"
|
47
|
+
append_template(ssh_pub_key_path, "/home/ubuntu/.ssh/authorized_keys")
|
48
|
+
queue echo_cmd "sudo chown -R ubuntu:ubuntu /home/ubuntu/.ssh"
|
49
|
+
queue echo_cmd "sudo chmod 664 /home/ubuntu/.ssh/authorized_keys"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
namespace :locale do
|
54
|
+
task :setup do
|
55
|
+
invoke :sudo
|
56
|
+
queue echo_cmd %{sudo locale-gen en_US en_US.UTF8}
|
57
|
+
queue echo_cmd %{sudo sh -c "echo 'LC_ALL=\"en_US.utf8\"' >> /etc/environment"}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
namespace :install do
|
62
|
+
task :prepare do
|
63
|
+
invoke :"apt:get:update"
|
64
|
+
invoke :"apt:get:build-essential"
|
65
|
+
invoke :"apt:get:git"
|
66
|
+
end
|
67
|
+
|
68
|
+
task :ruby do
|
69
|
+
in_directory '/tmp' do
|
70
|
+
queue "wget https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz"
|
71
|
+
queue "tar xf ruby-2.2.3.tar.gz"
|
72
|
+
end
|
73
|
+
|
74
|
+
in_directory '/tmp/ruby-2.2.3' do
|
75
|
+
queue "./configure"
|
76
|
+
queue "make"
|
77
|
+
queue "sudo make install"
|
78
|
+
queue "sudo ln -s /usr/local/bin/ruby /usr/bin/ruby"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
task :rubygems do
|
83
|
+
in_directory '/tmp' do
|
84
|
+
queue "wget http://rubygems.org/rubygems/rubygems-2.4.8.tgz"
|
85
|
+
queue "tar xf rubygems-2.4.8.tgz"
|
86
|
+
end
|
87
|
+
|
88
|
+
in_directory '/tmp/rubygems-2.4.8' do
|
89
|
+
queue "sudo ruby setup.rb install"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
task :www do
|
94
|
+
invoke :sudo
|
95
|
+
queue echo_cmd "sudo mkdir -p /var/www"
|
96
|
+
queue echo_cmd "sudo chown -R deploy:www-data /var/www"
|
97
|
+
end
|
98
|
+
|
99
|
+
task :ssh_key do
|
100
|
+
queue "ssh-keygen -t rsa"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require "mina/extras"
|
2
|
+
|
3
|
+
set :use_unicorn, true
|
4
|
+
|
5
|
+
namespace :unicorn do
|
6
|
+
|
7
|
+
desc "Unicorn: Parses config file and uploads it to server"
|
8
|
+
task :upload => [:'upload:config', :'upload:script']
|
9
|
+
|
10
|
+
namespace :upload do
|
11
|
+
desc "Parses Unicorn config file and uploads it to server"
|
12
|
+
task :config do
|
13
|
+
upload_shared_file("unicorn.rb")
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "Parses Unicorn control script file and uploads it to server"
|
17
|
+
task :script do
|
18
|
+
upload_shared_file("unicorn_init.sh")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Unicron: startup"
|
23
|
+
task :defaults do
|
24
|
+
invoke :sudo
|
25
|
+
queue echo_cmd "sudo update-rc.d unicorn-#{app!} defaults"
|
26
|
+
end
|
27
|
+
|
28
|
+
namespace :god do
|
29
|
+
task :upload do
|
30
|
+
upload_shared_file("unicorn.god")
|
31
|
+
end
|
32
|
+
|
33
|
+
task :link do
|
34
|
+
invoke :sudo
|
35
|
+
queue echo_cmd %{sudo cp -rf #{deploy_to}/#{shared_path}/unicorn.god #{god_path}/conf/unicorn-#{app!}.god}
|
36
|
+
invoke :"god:restart"
|
37
|
+
end
|
38
|
+
|
39
|
+
task :start do
|
40
|
+
invoke :sudo
|
41
|
+
queue echo_cmd %{sudo god start unicorn_#{app!}}
|
42
|
+
end
|
43
|
+
|
44
|
+
task :stop do
|
45
|
+
invoke :sudo
|
46
|
+
queue echo_cmd %{sudo god stop unicorn_#{app!}}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
task :log do
|
51
|
+
queue %{tail -f "#{deploy_to!}/#{shared_path}/log/unicorn.log" -n 200}
|
52
|
+
end
|
53
|
+
|
54
|
+
task :err_log do
|
55
|
+
queue %{tail -f "#{deploy_to!}/#{shared_path}/log/unicorn.error.log" -n 200}
|
56
|
+
end
|
57
|
+
|
58
|
+
desc "Unicorn: Link script files"
|
59
|
+
task :link do
|
60
|
+
invoke :sudo
|
61
|
+
extra_echo("Unicorn: Link script file")
|
62
|
+
queue echo_cmd %{sudo cp '#{deploy_to}/shared/unicorn_init.sh' '/etc/init.d/unicorn-#{app!}'}
|
63
|
+
queue echo_cmd %{sudo chown #{user!}:#{group!} /etc/init.d/unicorn-#{app!}}
|
64
|
+
queue echo_cmd %{sudo chmod u+x /etc/init.d/unicorn-#{app!}}
|
65
|
+
# invoke :"unicorn:defaults"
|
66
|
+
end
|
67
|
+
|
68
|
+
desc "Start unicorn"
|
69
|
+
task :start do
|
70
|
+
extra_echo("Unicorn: Start")
|
71
|
+
queue echo_cmd "/etc/init.d/unicorn-#{app!} start"
|
72
|
+
end
|
73
|
+
|
74
|
+
desc "Stop unicorn"
|
75
|
+
task :stop do
|
76
|
+
extra_echo("Unicorn: Stop")
|
77
|
+
queue echo_cmd "/etc/init.d/unicorn-#{app!} stop"
|
78
|
+
end
|
79
|
+
|
80
|
+
desc "Restart unicorn using 'upgrade'"
|
81
|
+
task :restart do
|
82
|
+
extra_echo("Unicorn: Restart")
|
83
|
+
queue echo_cmd "/etc/init.d/unicorn-#{app!} upgrade"
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
data/lib/mina/extras.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'mina/extras/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "mina-rails-tools"
|
8
|
+
spec.version = Mina::Extras::VERSION
|
9
|
+
spec.authors = ["Joey Lin"]
|
10
|
+
spec.email = ["joeyoooooo@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Extra deploy scripts for rails}
|
13
|
+
spec.description = %q{}
|
14
|
+
spec.homepage = "https://github.com/andyss/mina-rails-tools"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
18
|
+
# delete this section to allow pushing this gem to any host.
|
19
|
+
if spec.respond_to?(:metadata)
|
20
|
+
spec.metadata['allowed_push_host'] = "https://rubygems.org"
|
21
|
+
else
|
22
|
+
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
23
|
+
end
|
24
|
+
|
25
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
26
|
+
spec.bindir = "exe"
|
27
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
|
30
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
31
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
32
|
+
spec.add_development_dependency "mina", "0.3.7"
|
33
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#God::Contacts::Email.defaults do |d|
|
2
|
+
# d.from_email = 'god@test'
|
3
|
+
# d.from_name = 'God'
|
4
|
+
# d.delivery_method = :sendmail
|
5
|
+
#end
|
6
|
+
|
7
|
+
#God.contact(:email) do |c|
|
8
|
+
# c.name = 'Foo Bar'
|
9
|
+
# c.group = 'me'
|
10
|
+
# c.to_email = 'admin@test.com'
|
11
|
+
#end
|
12
|
+
|
13
|
+
# God::Contacts::Jabber.defaults do |d|
|
14
|
+
# d.host = "jabber.synbioz.com"
|
15
|
+
# d.from_jid = "foo@synbioz.com"
|
16
|
+
# d.password = "bar"
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# God.contact(:jabber) do |c|
|
20
|
+
# d.to_jid = "alfuken@gmail.com"
|
21
|
+
# end
|
22
|
+
|
23
|
+
God.load "<%= god_path %>/conf/*.god"
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
#
|
3
|
+
# God
|
4
|
+
#
|
5
|
+
# chkconfig: - 85 15
|
6
|
+
# description: start, stop, restart, status for God
|
7
|
+
#
|
8
|
+
|
9
|
+
RETVAL=0
|
10
|
+
GOD_PID="<%= god_pid_path %>/god.pid"
|
11
|
+
GOD_LOG="<%= god_log_path %>/god.log"
|
12
|
+
GOD_CONF="<%= god_path %>/global.god"
|
13
|
+
GOD_BIN="god"
|
14
|
+
|
15
|
+
case "$1" in
|
16
|
+
start)
|
17
|
+
$GOD_BIN -P $GOD_PID -l $GOD_LOG
|
18
|
+
$GOD_BIN load $GOD_CONF
|
19
|
+
RETVAL=$?
|
20
|
+
;;
|
21
|
+
stop)
|
22
|
+
kill `cat $GOD_PID`
|
23
|
+
RETVAL=$?
|
24
|
+
;;
|
25
|
+
restart)
|
26
|
+
kill `cat $GOD_PID`
|
27
|
+
$GOD_BIN -P $GOD_PID -l $GOD_LOG
|
28
|
+
$GOD_BIN load $GOD_CONF
|
29
|
+
RETVAL=$?
|
30
|
+
;;
|
31
|
+
status)
|
32
|
+
$GOD_BIN status
|
33
|
+
RETVAL=$?
|
34
|
+
;;
|
35
|
+
*)
|
36
|
+
echo "Usage: god {start|stop|restart|status}"
|
37
|
+
exit 1
|
38
|
+
;;
|
39
|
+
esac
|
40
|
+
|
41
|
+
exit $RETVAL
|