daddy 0.2.1 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/daddy/config.rb +6 -3
- data/lib/daddy/cucumber/capture.rb +1 -0
- data/lib/daddy/models/crud_extension.rb +17 -0
- data/lib/prefecture.rb +55 -0
- data/lib/tasks/cucumber.rake +1 -1
- data/lib/tasks/fluentd.conf +1 -0
- data/lib/tasks/fluentd.rake +47 -0
- data/lib/tasks/fluentd.repo +5 -0
- data/lib/tasks/fluentd_nginx.conf.erb +15 -0
- data/lib/tasks/god +44 -0
- data/lib/tasks/god.logrotate +11 -0
- data/lib/tasks/god.rake +38 -0
- data/lib/tasks/install.sh +45 -0
- data/lib/tasks/nginx.rake +11 -18
- data/lib/tasks/phantomjs.rake +2 -2
- data/lib/tasks/redis.rake +28 -0
- data/lib/tasks/resque.erb +112 -0
- data/lib/tasks/resque.rake +67 -0
- data/lib/tasks/task_helper.rb +10 -0
- metadata +43 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a501b67659185e10c75a00f791dceff99f819cde
|
4
|
+
data.tar.gz: 4d8714649160bd2de66f6f745d424424b1d26f13
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8af5b83a27d4a768a2a15162bcd56f2b8aceb738f2f4a1d5b60959a18a83d7f2201a65c625a9aee694c3ba7d852010538a3b202609c431d12618fc3c0d04c240
|
7
|
+
data.tar.gz: dc6265f19cf6cd80e665161934a6e23237cbca5ce7dddbe6e198765d4e206cbd7424a8e21260eceba31b19203e718f9ff720a67c16df6aa3c14062b5f0feb4a8
|
data/lib/daddy/config.rb
CHANGED
@@ -4,16 +4,19 @@ class Daddy::Config
|
|
4
4
|
|
5
5
|
def initialize(config_file)
|
6
6
|
if @config.nil?
|
7
|
-
|
8
7
|
if File.exist?(config_file)
|
9
8
|
@config = YAML.load_file(config_file)
|
9
|
+
else
|
10
|
+
@config = {}
|
10
11
|
end
|
11
12
|
end
|
12
|
-
@config
|
13
13
|
end
|
14
14
|
|
15
15
|
def use_feature_name?
|
16
|
-
@config
|
16
|
+
@config['cucumber'] && !!@config['cucumber']['use_feature_name']
|
17
17
|
end
|
18
18
|
|
19
|
+
def fluentd_nginx?
|
20
|
+
@config['fluentd'] && !!@config['fluentd']['nginx']
|
21
|
+
end
|
19
22
|
end
|
@@ -10,6 +10,23 @@ module Daddy
|
|
10
10
|
end
|
11
11
|
|
12
12
|
module InstanceMethods
|
13
|
+
|
14
|
+
def readable_by?(user)
|
15
|
+
true
|
16
|
+
end
|
17
|
+
|
18
|
+
def creatable_by?(user)
|
19
|
+
readable_by?(user)
|
20
|
+
end
|
21
|
+
|
22
|
+
def updatable_by?(user)
|
23
|
+
readable_by?(user)
|
24
|
+
end
|
25
|
+
|
26
|
+
def deletable_by?(user)
|
27
|
+
readable_by?(user)
|
28
|
+
end
|
29
|
+
|
13
30
|
def destroy_logically!
|
14
31
|
self.deleted = true
|
15
32
|
save!
|
data/lib/prefecture.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# coding: UTF-8
|
2
|
+
|
3
|
+
module Prefecture
|
4
|
+
|
5
|
+
PREFECTURES = {
|
6
|
+
1 => '北海道',
|
7
|
+
2 => '青森県',
|
8
|
+
3 => '岩手県',
|
9
|
+
4 => '宮城県',
|
10
|
+
5 => '秋田県',
|
11
|
+
6 => '山形県',
|
12
|
+
7 => '福島県',
|
13
|
+
8 => '茨城県',
|
14
|
+
9 => '栃木県',
|
15
|
+
10 => '群馬県',
|
16
|
+
11 => '埼玉県',
|
17
|
+
12 => '千葉県',
|
18
|
+
13 => '東京都',
|
19
|
+
14 => '神奈川県',
|
20
|
+
15 => '新潟県',
|
21
|
+
16 => '富山県',
|
22
|
+
17 => '石川県',
|
23
|
+
18 => '福井県',
|
24
|
+
19 => '山梨県',
|
25
|
+
20 => '長野県',
|
26
|
+
21 => '岐阜県',
|
27
|
+
22 => '静岡県',
|
28
|
+
23 => '愛知県',
|
29
|
+
24 => '三重県',
|
30
|
+
25 => '滋賀県',
|
31
|
+
26 => '京都府',
|
32
|
+
27 => '大阪府',
|
33
|
+
28 => '兵庫県',
|
34
|
+
29 => '奈良県',
|
35
|
+
30 => '和歌山県',
|
36
|
+
31 => '鳥取県',
|
37
|
+
32 => '島根県',
|
38
|
+
33 => '岡山県',
|
39
|
+
34 => '広島県',
|
40
|
+
35 => '山口県',
|
41
|
+
36 => '徳島県',
|
42
|
+
37 => '香川県',
|
43
|
+
38 => '愛媛県',
|
44
|
+
39 => '高知県',
|
45
|
+
40 => '福岡県',
|
46
|
+
41 => '佐賀県',
|
47
|
+
42 => '長崎県',
|
48
|
+
43 => '熊本県',
|
49
|
+
44 => '大分県',
|
50
|
+
45 => '宮崎県',
|
51
|
+
46 => '鹿児島県',
|
52
|
+
47 => '沖縄県',
|
53
|
+
}
|
54
|
+
|
55
|
+
end
|
data/lib/tasks/cucumber.rake
CHANGED
@@ -28,7 +28,7 @@ namespace :dad do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
output = "features/reports/index.html"
|
31
|
-
output = "
|
31
|
+
output = "test/reports" if format == 'junit'
|
32
32
|
|
33
33
|
command = "bundle exec cucumber --guess --quiet --no-multiline -r features --format pretty --format #{format} --out #{output} #{features.join(' ')} #{options}"
|
34
34
|
puts command
|
@@ -0,0 +1 @@
|
|
1
|
+
include conf.d/*.conf
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# coding: UTF-8
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
require_relative 'task_helper'
|
5
|
+
|
6
|
+
namespace :dad do
|
7
|
+
namespace :fluentd do
|
8
|
+
|
9
|
+
desc "Fluentdをインストールします。"
|
10
|
+
task :install do
|
11
|
+
if Daddy.config.fluentd_nginx?
|
12
|
+
nginx = File.join(Rails.root, 'tmp', 'fluentd', "#{app_name}_nginx.conf")
|
13
|
+
FileUtils.mkdir_p(File.dirname(nginx))
|
14
|
+
File.write(nginx, ERB.new(File.read(File.join(File.dirname(__FILE__), 'fluentd_nginx.conf.erb'))).result)
|
15
|
+
else
|
16
|
+
FileUtils.rm_f(nginx)
|
17
|
+
end
|
18
|
+
|
19
|
+
script = <<-EOF
|
20
|
+
#!/bin/bash
|
21
|
+
|
22
|
+
sudo rpm --import http://packages.treasure-data.com/redhat/RPM-GPG-KEY-td-agent
|
23
|
+
sudo cp -f #{File.join(File.dirname(__FILE__), 'fluentd.repo')} /etc/yum.repos.d/
|
24
|
+
sudo yum install td-agent
|
25
|
+
sudo gem install fluent-plugin-mongo
|
26
|
+
|
27
|
+
sudo cp -f #{File.join(File.dirname(__FILE__), 'fluentd.conf')} /etc/td-agent/td-agent.conf
|
28
|
+
sudo mkdir -p /etc/td-agent/conf.d
|
29
|
+
|
30
|
+
if [ -e #{nginx} ]; then
|
31
|
+
sudo cp -f #{nginx} /etc/td-agent/conf.d
|
32
|
+
sudo usermod -aG adm td-agent
|
33
|
+
fi
|
34
|
+
|
35
|
+
sudo /sbin/chkconfig td-agent on
|
36
|
+
if [ -e /var/run/td-agent/td-agent.pid ]; then
|
37
|
+
sudo /etc/init.d/td-agent restart
|
38
|
+
else
|
39
|
+
sudo /etc/init.d/td-agent start
|
40
|
+
fi
|
41
|
+
EOF
|
42
|
+
tmpfile = File.join(Rails.root, 'tmp', 'dad-fluentd-install-' + Daddy::Utils::StringUtils.current_time + '.sh')
|
43
|
+
File.write(tmpfile, ERB.new(script).result)
|
44
|
+
fail unless system("bash #{tmpfile}")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<source>
|
2
|
+
type tail
|
3
|
+
format /^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)" "(?<forwarder>[^\"]*)")?/
|
4
|
+
time_format %d/%b/%Y:%H:%M:%S %z
|
5
|
+
path /var/log/nginx/<%= app_name %>_access.log
|
6
|
+
tag <%= app_name %>.nginx.access
|
7
|
+
pos_file /var/log/td-agent/nginx.pos
|
8
|
+
</source>
|
9
|
+
<match <%= app_name %>.nginx.access>
|
10
|
+
type mongo
|
11
|
+
database <%= app_name %>
|
12
|
+
collection nginx_access
|
13
|
+
host localhost
|
14
|
+
port 27017
|
15
|
+
</match>
|
data/lib/tasks/god
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
#
|
3
|
+
# god Startup script for God monitoring tool.
|
4
|
+
#
|
5
|
+
# chkconfig: - 85 15
|
6
|
+
# description: god monitors your system
|
7
|
+
#
|
8
|
+
|
9
|
+
CONFIG_FILES=/etc/god/*.god
|
10
|
+
PID=/var/run/god.pid
|
11
|
+
LOG=/var/log/god.log
|
12
|
+
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
13
|
+
RETVAL=0
|
14
|
+
|
15
|
+
case "$1" in
|
16
|
+
start)
|
17
|
+
god -P $PID -l $LOG --log-level info
|
18
|
+
for config in $CONFIG_FILES; do
|
19
|
+
god load $config
|
20
|
+
done
|
21
|
+
RETVAL=$?
|
22
|
+
;;
|
23
|
+
stop)
|
24
|
+
kill `cat $PID`
|
25
|
+
RETVAL=$?
|
26
|
+
;;
|
27
|
+
restart)
|
28
|
+
kill `cat $PID`
|
29
|
+
god -P $PID -l $LOG --log-level info
|
30
|
+
for config in $CONFIG_FILES; do
|
31
|
+
god load $config
|
32
|
+
done
|
33
|
+
RETVAL=$?
|
34
|
+
;;
|
35
|
+
status)
|
36
|
+
RETVAL=$?
|
37
|
+
;;
|
38
|
+
*)
|
39
|
+
echo "Usage: god {start|stop|restart|status}"
|
40
|
+
exit 1
|
41
|
+
;;
|
42
|
+
esac
|
43
|
+
|
44
|
+
exit $RETVAL
|
data/lib/tasks/god.rake
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: UTF-8
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
|
5
|
+
namespace :dad do
|
6
|
+
namespace :god do
|
7
|
+
|
8
|
+
desc "Godをインストールします。"
|
9
|
+
task :install do
|
10
|
+
script = <<-EOF
|
11
|
+
#!/bin/bash
|
12
|
+
|
13
|
+
if [ -e /var/run/god.pid ]; then
|
14
|
+
sudo /etc/init.d/god stop
|
15
|
+
fi
|
16
|
+
|
17
|
+
sudo gem install god
|
18
|
+
sudo mkdir -p /etc/god
|
19
|
+
|
20
|
+
sudo cp -f #{File.join(File.dirname(__FILE__), 'god')} /etc/init.d/god
|
21
|
+
sudo chown root:root /etc/init.d/god
|
22
|
+
sudo chmod 755 /etc/init.d/god
|
23
|
+
|
24
|
+
sudo cp -f #{File.join(File.dirname(__FILE__), 'god.logrotate')} /etc/logrotate.d/god
|
25
|
+
sudo chown root:root /etc/logrotate.d/god
|
26
|
+
sudo chmod 644 /etc/logrotate.d/god
|
27
|
+
|
28
|
+
sudo /sbin/chkconfig god on
|
29
|
+
sudo /etc/init.d/god start
|
30
|
+
EOF
|
31
|
+
|
32
|
+
tmpfile = File.join(Rails.root, 'tmp', 'dad-god-install-' + Daddy::Utils::StringUtils.current_time + '.sh')
|
33
|
+
File.write(tmpfile, ERB.new(script).result)
|
34
|
+
fail unless system("bash #{tmpfile}")
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
echo "既にGodが起動していたら停止します。"
|
4
|
+
if [ -e /var/run/god.pid ]; then
|
5
|
+
sudo /etc/init.d/god stop
|
6
|
+
fi
|
7
|
+
|
8
|
+
echo "Godをインストールします。"
|
9
|
+
sudo gem install god
|
10
|
+
|
11
|
+
echo "Godの起動スクリプトを /etc/init.d/god に配置します。"
|
12
|
+
sudo cp -f script/god/god /etc/init.d/god
|
13
|
+
sudo chown root:root /etc/init.d/god
|
14
|
+
sudo chmod 755 /etc/init.d/god
|
15
|
+
|
16
|
+
echo "Godの設定ファイルを /etc/god/madai.god に配置します。"
|
17
|
+
export RAILS_ENV=$1
|
18
|
+
export RAILS_ROOT=$2
|
19
|
+
|
20
|
+
sudo mkdir -p /etc/god
|
21
|
+
erb -T - script/god/madai.god.erb > tmp/madai.god
|
22
|
+
sudo cp -f tmp/madai.god /etc/god/madai.god
|
23
|
+
sudo chown -R root:root /etc/god
|
24
|
+
sudo chmod 755 /etc/god
|
25
|
+
sudo chmod -R 644 /etc/god/*
|
26
|
+
|
27
|
+
unset RAILS_ENV
|
28
|
+
unset RAILS_ROOT
|
29
|
+
|
30
|
+
echo "Godのログロテート設定を /etc/logrotate.d/god に配置します。"
|
31
|
+
sudo cp -f script/god/logrotate /etc/logrotate.d/god
|
32
|
+
sudo chown root:root /etc/logrotate.d/god
|
33
|
+
sudo chmod 644 /etc/logrotate.d/god
|
34
|
+
|
35
|
+
echo "サービスの自動起動設定を行います。"
|
36
|
+
sudo /sbin/chkconfig god on
|
37
|
+
|
38
|
+
echo "Godを起動します。"
|
39
|
+
if [ -z ${NO_START} ]; then
|
40
|
+
NO_START=0
|
41
|
+
fi
|
42
|
+
|
43
|
+
if [ ${NO_START} -ne 1 ]; then
|
44
|
+
sudo /etc/init.d/god start
|
45
|
+
fi
|
data/lib/tasks/nginx.rake
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# coding: UTF-8
|
2
2
|
|
3
3
|
require 'rake'
|
4
|
-
|
4
|
+
require_relative 'task_helper'
|
5
5
|
|
6
6
|
namespace :dad do
|
7
7
|
namespace :nginx do
|
@@ -29,31 +29,24 @@ namespace :dad do
|
|
29
29
|
|
30
30
|
system("sudo cp -f tmp/nginx.conf /etc/nginx/conf.d/nginx.conf")
|
31
31
|
|
32
|
-
|
33
32
|
if publish
|
34
33
|
system("sudo mkdir -p /var/lib/daddy")
|
35
34
|
system("sudo chown -R #{ENV['USER']}:#{ENV['USER']} /var/lib/daddy")
|
36
35
|
end
|
37
36
|
end
|
38
37
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
fail unless system("RAILS_ROOT=#{rails_root} RAILS_ENV=#{Rails.env} APP_NAME=#{app_name} erb -T - #{File.dirname(__FILE__)}/nginx.app.conf.erb > tmp/nginx.#{app_name}.conf")
|
45
|
-
system("sudo mkdir -p /etc/nginx/conf.d/servers")
|
46
|
-
system("sudo cp -f tmp/nginx.#{app_name}.conf /etc/nginx/conf.d/servers/#{app_name}.conf")
|
47
|
-
end
|
38
|
+
desc 'Nginxにアプリケーションの設定ファイルをインストールします。'
|
39
|
+
task :config => :environment do
|
40
|
+
fail unless system("RAILS_ROOT=#{rails_root} RAILS_ENV=#{Rails.env} APP_NAME=#{app_name} erb -T - #{File.dirname(__FILE__)}/nginx.app.conf.erb > tmp/nginx.#{app_name}.conf")
|
41
|
+
system("sudo mkdir -p /etc/nginx/conf.d/servers")
|
42
|
+
system("sudo cp -f tmp/nginx.#{app_name}.conf /etc/nginx/conf.d/servers/#{app_name}.conf")
|
48
43
|
end
|
49
44
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
system("sudo cp -f tmp/nginx.jenkins.conf /etc/nginx/conf.d/servers/jenkins.conf")
|
56
|
-
end
|
45
|
+
desc 'NginxにJenkinsの設定ファイルをインストールします。'
|
46
|
+
task :jenkins => :environment do
|
47
|
+
fail unless system("erb -T - #{File.dirname(__FILE__)}/nginx.jenkins.conf.erb > tmp/nginx.jenkins.conf")
|
48
|
+
system("sudo mkdir -p /etc/nginx/conf.d/servers")
|
49
|
+
system("sudo cp -f tmp/nginx.jenkins.conf /etc/nginx/conf.d/servers/jenkins.conf")
|
57
50
|
end
|
58
51
|
|
59
52
|
end
|
data/lib/tasks/phantomjs.rake
CHANGED
@@ -7,10 +7,10 @@ namespace :dad do
|
|
7
7
|
|
8
8
|
desc "PhantomJSをインストールします。"
|
9
9
|
task :install do
|
10
|
-
name = 'phantomjs-1.9.
|
10
|
+
name = 'phantomjs-1.9.7-linux-x86_64'
|
11
11
|
file = "#{name}.tar.bz2"
|
12
12
|
unless File.exist?("tmp/#{file}")
|
13
|
-
system("wget https://
|
13
|
+
system("wget https://bitbucket.org/ariya/phantomjs/downloads/#{file} -O tmp/#{file}")
|
14
14
|
end
|
15
15
|
system("rm -Rf tmp/#{name}")
|
16
16
|
system("cd tmp && tar jxf #{file}")
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: UTF-8
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
|
5
|
+
namespace :dad do
|
6
|
+
namespace :redis do
|
7
|
+
|
8
|
+
desc "Redisをインストールします。"
|
9
|
+
task :install do
|
10
|
+
script = <<-EOF
|
11
|
+
#!/bin/bash
|
12
|
+
|
13
|
+
if [ -e /var/run/redis/redis.pid ]; then
|
14
|
+
sudo /etc/init.d/redis stop
|
15
|
+
fi
|
16
|
+
|
17
|
+
sudo yum --enablerepo=epel install redis
|
18
|
+
sudo /sbin/chkconfig redis on
|
19
|
+
sudo /etc/init.d/redis start
|
20
|
+
EOF
|
21
|
+
|
22
|
+
tmpfile = File.join(Rails.root, 'tmp', 'dad-redis-install-' + Daddy::Utils::StringUtils.current_time + '.sh')
|
23
|
+
File.write(tmpfile, ERB.new(script).result)
|
24
|
+
fail unless system("bash #{tmpfile}")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
<%
|
2
|
+
app_name = ENV['APP_NAME']
|
3
|
+
rails_env = ENV['RAILS_ENV']
|
4
|
+
rails_root = ENV['RAILS_ROOT']
|
5
|
+
user = ENV['USER']
|
6
|
+
num_workers = ENV['NUM_WORKERS']
|
7
|
+
-%>
|
8
|
+
# coding: UTF-8
|
9
|
+
|
10
|
+
<%= num_workers %>.times do |num|
|
11
|
+
God.watch do |w|
|
12
|
+
w.dir = "<%= rails_root %>"
|
13
|
+
w.name = "resque-<%= app_name %>-#{num}"
|
14
|
+
w.log = "#{w.dir}/log/#{w.name}.log"
|
15
|
+
w.group = 'resque-<%= app_name %>'
|
16
|
+
w.interval = 60.seconds
|
17
|
+
w.env = {"QUEUE"=>"critical,high,normal,low", "RAILS_ENV"=>"<%= rails_env %>"}
|
18
|
+
w.start = "/usr/local/bin/bundle exec rake -f <%= rails_root %>/Rakefile environment resque:work"
|
19
|
+
|
20
|
+
w.uid = '<%= user %>'
|
21
|
+
w.gid = '<%= user %>'
|
22
|
+
|
23
|
+
# restart if memory gets too high
|
24
|
+
w.transition(:up, :restart) do |on|
|
25
|
+
on.condition(:memory_usage) do |c|
|
26
|
+
c.above = 255.megabytes
|
27
|
+
c.times = 2
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# determine the state on startup
|
32
|
+
w.transition(:init, { true => :up, false => :start }) do |on|
|
33
|
+
on.condition(:process_running) do |c|
|
34
|
+
c.running = true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# determine when process has finished starting
|
39
|
+
w.transition([:start, :restart], :up) do |on|
|
40
|
+
on.condition(:process_running) do |c|
|
41
|
+
c.running = true
|
42
|
+
c.interval = 5.seconds
|
43
|
+
end
|
44
|
+
|
45
|
+
# failsafe
|
46
|
+
on.condition(:tries) do |c|
|
47
|
+
c.times = 5
|
48
|
+
c.transition = :start
|
49
|
+
c.interval = 5.seconds
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# start if process is not running
|
54
|
+
w.transition(:up, :start) do |on|
|
55
|
+
on.condition(:process_running) do |c|
|
56
|
+
c.running = false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
1.times do |num|
|
63
|
+
God.watch do |w|
|
64
|
+
w.dir = "<%= rails_root %>"
|
65
|
+
w.name = "resque-scheduler-<%= app_name %>-#{num}"
|
66
|
+
w.log = "#{w.dir}/log/#{w.name}.log"
|
67
|
+
w.group = 'resque-<%= app_name %>'
|
68
|
+
w.interval = 30.seconds
|
69
|
+
w.env = {"APP_NAME"=>"resque-scheduler-<%= app_name %>", "RAILS_ENV"=>"<%= rails_env %>"}
|
70
|
+
w.start = "/usr/local/bin/bundle exec rake -f <%= rails_root %>/Rakefile environment resque:scheduler"
|
71
|
+
|
72
|
+
w.uid = '<%= user %>'
|
73
|
+
w.gid = '<%= user %>'
|
74
|
+
|
75
|
+
# restart if memory gets too high
|
76
|
+
w.transition(:up, :restart) do |on|
|
77
|
+
on.condition(:memory_usage) do |c|
|
78
|
+
c.above = 256.megabytes
|
79
|
+
c.times = 2
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# determine the state on startup
|
84
|
+
w.transition(:init, { true => :up, false => :start }) do |on|
|
85
|
+
on.condition(:process_running) do |c|
|
86
|
+
c.running = true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# determine when process has finished starting
|
91
|
+
w.transition([:start, :restart], :up) do |on|
|
92
|
+
on.condition(:process_running) do |c|
|
93
|
+
c.running = true
|
94
|
+
c.interval = 5.seconds
|
95
|
+
end
|
96
|
+
|
97
|
+
# failsafe
|
98
|
+
on.condition(:tries) do |c|
|
99
|
+
c.times = 5
|
100
|
+
c.transition = :start
|
101
|
+
c.interval = 5.seconds
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# start if process is not running
|
106
|
+
w.transition(:up, :start) do |on|
|
107
|
+
on.condition(:process_running) do |c|
|
108
|
+
c.running = false
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# coding: UTF-8
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
namespace :dad do
|
7
|
+
namespace :resque do
|
8
|
+
|
9
|
+
desc "Resqueをインストールします。"
|
10
|
+
task :install => :environment do
|
11
|
+
rails_root = ENV['RAILS_ROOT'] || Rails.root
|
12
|
+
app_name = YAML.load_file("#{rails_root}/config/database.yml")[Rails.env]['database']
|
13
|
+
|
14
|
+
script = <<-EOF
|
15
|
+
#!/bin/bash
|
16
|
+
|
17
|
+
export APP_NAME=#{app_name}
|
18
|
+
export RAILS_ROOT=#{rails_root}
|
19
|
+
export RAILS_ENV=#{Rails.env}
|
20
|
+
export NUM_WORKERS=1
|
21
|
+
erb -T - #{File.join(File.dirname(__FILE__), 'resque.erb')} > tmp/#{app_name}.god
|
22
|
+
|
23
|
+
sudo mkdir -p /etc/god
|
24
|
+
sudo cp -f tmp/#{app_name}.god /etc/god/#{app_name}.god
|
25
|
+
sudo chown -R root:root /etc/god
|
26
|
+
sudo chmod 755 /etc/god
|
27
|
+
sudo chmod -R 644 /etc/god/*
|
28
|
+
|
29
|
+
sudo /etc/init.d/god restart
|
30
|
+
EOF
|
31
|
+
|
32
|
+
tmpfile = File.join(Rails.root, 'tmp', 'dad-resque-install-' + Daddy::Utils::StringUtils.current_time + '.sh')
|
33
|
+
File.write(tmpfile, ERB.new(script).result)
|
34
|
+
fail unless system("bash #{tmpfile}")
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
require 'resque/tasks'
|
41
|
+
require 'resque_scheduler/tasks'
|
42
|
+
|
43
|
+
namespace :resque do
|
44
|
+
task :setup do
|
45
|
+
require 'resque'
|
46
|
+
require 'resque_scheduler'
|
47
|
+
|
48
|
+
# If you want to be able to dynamically change the schedule,
|
49
|
+
# uncomment this line. A dynamic schedule can be updated via the
|
50
|
+
# Resque::Scheduler.set_schedule (and remove_schedule) methods.
|
51
|
+
# When dynamic is set to true, the scheduler process looks for
|
52
|
+
# schedule changes and applies them on the fly.
|
53
|
+
# Note: This feature is only available in >=2.0.0.
|
54
|
+
Resque::Scheduler.dynamic = true
|
55
|
+
|
56
|
+
# The schedule doesn't need to be stored in a YAML, it just needs to
|
57
|
+
# be a hash. YAML is usually the easiest.
|
58
|
+
#Resque.schedule = YAML.load_file('your_resque_schedule.yml')
|
59
|
+
|
60
|
+
# If your schedule already has +queue+ set for each job, you don't
|
61
|
+
# need to require your jobs. This can be an advantage since it's
|
62
|
+
# less code that resque-scheduler needs to know about. But in a small
|
63
|
+
# project, it's usually easier to just include you job classes here.
|
64
|
+
# So, something like this:
|
65
|
+
#require 'jobs'
|
66
|
+
end
|
67
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: daddy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ichy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|
@@ -184,6 +184,34 @@ dependencies:
|
|
184
184
|
- - ~>
|
185
185
|
- !ruby/object:Gem::Version
|
186
186
|
version: '3.0'
|
187
|
+
- !ruby/object:Gem::Dependency
|
188
|
+
name: resque
|
189
|
+
requirement: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - ~>
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '1.25'
|
194
|
+
type: :runtime
|
195
|
+
prerelease: false
|
196
|
+
version_requirements: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - ~>
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '1.25'
|
201
|
+
- !ruby/object:Gem::Dependency
|
202
|
+
name: resque-scheduler
|
203
|
+
requirement: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - ~>
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '2.5'
|
208
|
+
type: :runtime
|
209
|
+
prerelease: false
|
210
|
+
version_requirements: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - ~>
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: '2.5'
|
187
215
|
- !ruby/object:Gem::Dependency
|
188
216
|
name: selenium-webdriver
|
189
217
|
requirement: !ruby/object:Gem::Requirement
|
@@ -298,6 +326,7 @@ files:
|
|
298
326
|
- lib/daddy/rails/railtie.rb
|
299
327
|
- lib/daddy/utils/sql_utils.rb
|
300
328
|
- lib/daddy/utils/string_utils.rb
|
329
|
+
- lib/prefecture.rb
|
301
330
|
- lib/sql_builder.rb
|
302
331
|
- lib/ssl/cert.pem
|
303
332
|
- lib/tasks/cucumber.rake
|
@@ -309,6 +338,10 @@ files:
|
|
309
338
|
- lib/tasks/db_create.rake
|
310
339
|
- lib/tasks/db_fixtures.rake
|
311
340
|
- lib/tasks/diary.rake
|
341
|
+
- lib/tasks/fluentd.conf
|
342
|
+
- lib/tasks/fluentd.rake
|
343
|
+
- lib/tasks/fluentd.repo
|
344
|
+
- lib/tasks/fluentd_nginx.conf.erb
|
312
345
|
- lib/tasks/generate/controller.rake
|
313
346
|
- lib/tasks/generate/routes.rake
|
314
347
|
- lib/tasks/generate/templates/_form.html.erb
|
@@ -319,6 +352,10 @@ files:
|
|
319
352
|
- lib/tasks/generate/templates/routes.rb.erb
|
320
353
|
- lib/tasks/generate/templates/show.html.erb
|
321
354
|
- lib/tasks/generate/view.rake
|
355
|
+
- lib/tasks/god
|
356
|
+
- lib/tasks/god.logrotate
|
357
|
+
- lib/tasks/god.rake
|
358
|
+
- lib/tasks/install.sh
|
322
359
|
- lib/tasks/jenkins
|
323
360
|
- lib/tasks/jenkins.conf
|
324
361
|
- lib/tasks/jenkins.rake
|
@@ -329,6 +366,10 @@ files:
|
|
329
366
|
- lib/tasks/nginx.repo
|
330
367
|
- lib/tasks/phantomjs.rake
|
331
368
|
- lib/tasks/publish.rake
|
369
|
+
- lib/tasks/redis.rake
|
370
|
+
- lib/tasks/resque.erb
|
371
|
+
- lib/tasks/resque.rake
|
372
|
+
- lib/tasks/task_helper.rb
|
332
373
|
- lib/tasks/tesseract.rake
|
333
374
|
- lib/tasks/test.rake
|
334
375
|
- lib/tasks/unicorn.erb
|