caploy 0.2.5 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/caploy.gemspec +6 -12
- data/lib/caploy/railtie.rb +13 -0
- data/lib/caploy/recipes/assets.rb +11 -19
- data/lib/caploy/recipes/database.rb +44 -47
- data/lib/caploy/recipes/deploy.rb +219 -0
- data/lib/caploy/recipes/info.rb +24 -28
- data/lib/caploy/recipes/memcache.rb +9 -13
- data/lib/caploy/recipes/nginx.rb +82 -86
- data/lib/caploy/recipes/paperclip.rb +7 -8
- data/lib/caploy/recipes/seeding.rb +3 -5
- data/lib/caploy/recipes/setup.rb +31 -35
- data/lib/caploy/recipes/taillog.rb +22 -0
- data/lib/caploy/recipes/unicorn.rb +109 -108
- data/lib/caploy/templates/unicorn/unicorn.rb.erb +2 -2
- data/lib/caploy/version.rb +1 -1
- data/lib/caploy.rb +16 -1
- metadata +34 -153
- data/lib/caploy/recipes/airbrake.rb +0 -4
- data/lib/caploy/recipes/bundler.rb +0 -25
- data/lib/caploy/recipes/defaults.rb +0 -132
- data/lib/caploy/recipes/monitoring.rb +0 -12
- data/lib/caploy/recipes/passenger.rb +0 -32
- data/lib/caploy/recipes/puma.rb +0 -25
- data/lib/caploy/recipes/rbenv.rb +0 -7
- data/lib/caploy/recipes/redis.rb +0 -41
- data/lib/caploy/recipes/rvm.rb +0 -8
- data/lib/caploy/recipes/symlink.rb +0 -24
- data/lib/caploy/recipes/unicorn_bluepill.rb +0 -90
- data/lib/caploy/recipes/whenever.rb +0 -8
- data/lib/caploy/templates/bluepill/init.erb +0 -9
- data/lib/caploy/templates/bluepill/unicorn_config.rb.erb +0 -43
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f94ff6a9cd33e877b7e4549a6a9f0f388f9b21d1
|
4
|
+
data.tar.gz: 05fb7c1d5234e6b1ed6cecd37bb43bb5a4828531
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ad4eb74d7811e5f654266d2a4e592af807c65febd1fe00fc350c3305e765031cd59236c018f44e216e0431a84406c05726af5a6d4eb8a81d54ecd46ca43d585f
|
7
|
+
data.tar.gz: c39d83b0ef24bfd87973059810c8442a52e5d4692d22c3c5b0de2789006623b516935b6ad1b09dd2098ac3c61e14c8feff2bc8972255ac8aa0f150fe81f7d8fb
|
data/caploy.gemspec
CHANGED
@@ -4,7 +4,7 @@ require File.expand_path('../lib/caploy/version', __FILE__)
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.authors = ['Michael Schiller']
|
6
6
|
spec.email = ['michael.schiller@gmx.de']
|
7
|
-
spec.description = %q{capistrano deployment
|
7
|
+
spec.description = %q{capistrano deployment helpling}
|
8
8
|
spec.summary = %q{capistrano deployment tasks for different projects}
|
9
9
|
spec.homepage = 'https://github.com/mschiller/caploy'
|
10
10
|
spec.license = 'MIT'
|
@@ -12,21 +12,15 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
13
13
|
spec.files = `git ls-files`.split("\n")
|
14
14
|
spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
-
spec.name =
|
15
|
+
spec.name = 'caploy'
|
16
16
|
spec.require_paths = ['lib']
|
17
17
|
|
18
18
|
spec.add_dependency('gemcutter')
|
19
19
|
|
20
|
-
spec.add_dependency('capistrano', '
|
21
|
-
spec.add_dependency('capistrano-
|
22
|
-
spec.add_dependency('
|
23
|
-
spec.add_dependency('
|
24
|
-
spec.add_dependency('capistrano-uptodate', '>= 0.0.2')
|
25
|
-
spec.add_dependency('capistrano-multiconfig', '>= 0.0.4')
|
26
|
-
spec.add_dependency('capistrano-patch', '>= 0.0.2')
|
27
|
-
spec.add_dependency('capistrano-calendar', '>= 0.1.2')
|
28
|
-
spec.add_dependency('rvm-capistrano', '>= 1.2.7')
|
29
|
-
spec.add_dependency('erubis')
|
20
|
+
spec.add_dependency('capistrano-rails', '1.1.1')
|
21
|
+
spec.add_dependency('capistrano-bundler', '1.1.3')
|
22
|
+
spec.add_dependency('capistrano-rbenv', '2.0.2')
|
23
|
+
spec.add_dependency('capistrano3-unicorn', '0.2.1')
|
30
24
|
|
31
25
|
spec.version = Caploy::VERSION
|
32
26
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'caploy'
|
2
|
+
require 'rails'
|
3
|
+
|
4
|
+
module Caploy
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
railtie_name :caploy
|
7
|
+
|
8
|
+
rake_tasks do
|
9
|
+
load File.join(File.dirname(__FILE__), "tasks/assets.rake")
|
10
|
+
#Dir[File.join(File.dirname(__FILE__), 'tasks/*.rake')].each { |f| load f }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,26 +1,18 @@
|
|
1
1
|
Capistrano::Configuration.instance.load do
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
namespace :local do
|
10
|
-
desc 'Synchronize your local assets using remote assets'
|
11
|
-
task :sync do
|
12
|
-
if Util.prompt "Are you sure you want to erase your local assets with server assets"
|
13
|
-
servers = find_servers :roles => :app
|
14
|
-
[assets_dir].flatten.each do |dir|
|
15
|
-
system("rsync -a --del --progress --rsh='ssh -p #{fetch(:ssh_port, 22)}' #{user}@#{servers.first}:#{shared_path}/#{dir}/ #{local_assets_dir}")
|
16
|
-
end
|
2
|
+
namespace :local do
|
3
|
+
desc 'Synchronize your local assets using remote assets'
|
4
|
+
task :sync do
|
5
|
+
if Util.prompt "Are you sure you want to erase your local assets with server assets"
|
6
|
+
servers = find_servers :roles => :app
|
7
|
+
[assets_dir].flatten.each do |dir|
|
8
|
+
system("rsync -a --del --progress --rsh='ssh -p #{fetch(:ssh_port, 22)}' #{user}@#{servers.first}:#{shared_path}/#{dir}/ #{local_assets_dir}")
|
17
9
|
end
|
18
10
|
end
|
19
11
|
end
|
12
|
+
end
|
20
13
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
14
|
+
desc 'Synchronize your local assets using remote assets'
|
15
|
+
task :pull do
|
16
|
+
assets.local.sync
|
25
17
|
end
|
26
18
|
end
|
@@ -1,58 +1,55 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
if if Util.prompt 'Are you sure you want to REPLACE THE REMOTE DATABASE with local database'
|
14
|
-
Database.local_to_remote(instance)
|
15
|
-
end
|
16
|
-
end
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../util")
|
2
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../mysql")
|
3
|
+
|
4
|
+
instance.set :local_rails_env, ENV['RAILS_ENV'] || 'development' unless exists?(:local_rails_env)
|
5
|
+
instance.set :db_local_clean, false unless exists?(:db_local_clean)
|
6
|
+
|
7
|
+
namespace :db do
|
8
|
+
namespace :remote do
|
9
|
+
desc 'Synchronize the local database to the remote database'
|
10
|
+
task :sync, :roles => :db do
|
11
|
+
if if Util.prompt 'Are you sure you want to REPLACE THE REMOTE DATABASE with local database'
|
12
|
+
Database.local_to_remote(instance)
|
17
13
|
end
|
14
|
+
end
|
15
|
+
end
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
17
|
+
namespace :local do
|
18
|
+
desc 'Synchronize your local database using remote database data'
|
19
|
+
task :sync, :roles => :db do
|
20
|
+
puts "Local database: #{Database::Local.new(instance).database}"
|
21
|
+
if rails_env == 'production'
|
22
|
+
puts 'Never sync remote production database!'
|
23
|
+
else
|
24
|
+
if Util.prompt 'Are you sure you want to erase your local database with server database'
|
25
|
+
Database.remote_to_local(instance)
|
29
26
|
end
|
30
27
|
end
|
31
28
|
end
|
29
|
+
end
|
32
30
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
desc 'Synchronize your local database using remote database data'
|
32
|
+
task :pull do
|
33
|
+
db.local.sync
|
34
|
+
end
|
37
35
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
36
|
+
desc 'Synchronize the local database to the remote database'
|
37
|
+
task :push do
|
38
|
+
db.remote.sync
|
42
39
|
end
|
43
40
|
end
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
41
|
+
end
|
42
|
+
|
43
|
+
namespace :deploy do
|
44
|
+
after 'deploy:make_symlinks', 'deploy:dynamic_migrations' if fetch(:dynamic_migration, false)
|
45
|
+
|
46
|
+
task :dynamic_migrations do
|
47
|
+
from = source.next_revision(current_revision)
|
48
|
+
if capture("cd #{latest_release} && #{source.local.log(from)} db/migrate | wc -l").to_i > 0
|
49
|
+
run "cd #{current_release} && RAILS_ENV=#{rails_env} #{rake} db:migrate"
|
50
|
+
logger.info "New migrations added - running migrations."
|
51
|
+
else
|
52
|
+
logger.info "Skipping migrations - there are not any new."
|
56
53
|
end
|
57
54
|
end
|
58
|
-
end
|
55
|
+
end
|
@@ -0,0 +1,219 @@
|
|
1
|
+
|
2
|
+
# Custom SSH Options
|
3
|
+
# ==================
|
4
|
+
# You may pass any option but keep in mind that net/ssh understands a
|
5
|
+
# limited set of options, consult[net/ssh documentation](http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start).
|
6
|
+
#
|
7
|
+
# Global options
|
8
|
+
# --------------
|
9
|
+
# set :ssh_options, {
|
10
|
+
# keys: %w(/home/rlisowski/.ssh/id_rsa),
|
11
|
+
# forward_agent: false,
|
12
|
+
# auth_methods: %w(password)
|
13
|
+
# }
|
14
|
+
#
|
15
|
+
# And/or per server (overrides global)
|
16
|
+
# ------------------------------------
|
17
|
+
# server 'example.com',
|
18
|
+
# user: 'user_name',
|
19
|
+
# roles: %w{web app},
|
20
|
+
# ssh_options: {
|
21
|
+
# user: 'user_name', # overrides user setting above
|
22
|
+
# keys: %w(/home/user_name/.ssh/id_rsa),
|
23
|
+
# forward_agent: false,
|
24
|
+
# auth_methods: %w(publickey password)
|
25
|
+
# # password: 'please use keys'
|
26
|
+
# }
|
27
|
+
|
28
|
+
#set :unicorn_hard_restart, true if ENV['HARD_RESTART']
|
29
|
+
|
30
|
+
# what specs should be run before deployment is allowed to
|
31
|
+
# continue, see lib/capistrano/tasks/run_tests.cap
|
32
|
+
# set :tests, []
|
33
|
+
|
34
|
+
# files which need to be symlinked to other parts of the
|
35
|
+
# filesystem. For example nginx virtualhosts, log rotation
|
36
|
+
# init scripts etc.
|
37
|
+
# set(:symlinks, [
|
38
|
+
# {
|
39
|
+
# source: "nginx.conf",
|
40
|
+
# link: "/etc/nginx/sites-enabled/#{fetch(:full_app_name)}"
|
41
|
+
# },
|
42
|
+
# {
|
43
|
+
# source: "unicorn_init.sh",
|
44
|
+
# link: "/etc/init.d/unicorn_#{fetch(:full_app_name)}"
|
45
|
+
# }
|
46
|
+
# ])
|
47
|
+
|
48
|
+
# which config files should be copied by deploy:setup_config
|
49
|
+
# see documentation in lib/capistrano/tasks/setup_config.cap
|
50
|
+
# for details of operations
|
51
|
+
# set(:config_files, %w(
|
52
|
+
# nginx.conf
|
53
|
+
# database.example.yml
|
54
|
+
# unicorn.rb
|
55
|
+
# unicorn_init.sh
|
56
|
+
# ))
|
57
|
+
|
58
|
+
# Default branch is :master
|
59
|
+
# ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }.call
|
60
|
+
|
61
|
+
# Default value for :scm is :git
|
62
|
+
# set :scm, :git
|
63
|
+
|
64
|
+
# Default value for :format is :pretty
|
65
|
+
# set :format, :pretty
|
66
|
+
|
67
|
+
# Default value for :log_level is :debug
|
68
|
+
# set :log_level, :debug
|
69
|
+
|
70
|
+
# Default value for :pty is false
|
71
|
+
# set :pty, true
|
72
|
+
|
73
|
+
# Default value for default_env is {}
|
74
|
+
# set :default_env, { path: "/opt/ruby/bin:$PATH" }
|
75
|
+
|
76
|
+
namespace :deploy do
|
77
|
+
task :restart do
|
78
|
+
invoke 'unicorn:restart'
|
79
|
+
end
|
80
|
+
|
81
|
+
desc 'build missing paperclip styles'
|
82
|
+
task :build_missing_paperclip_styles do # app
|
83
|
+
run "cd #{current_path}; RAILS_ENV=#{rails_env} #{rake} paperclip:refresh:missing_styles"
|
84
|
+
end
|
85
|
+
|
86
|
+
desc "checks whether the currently checkout out revision matches the
|
87
|
+
remote one we're trying to deploy from"
|
88
|
+
task :check_revision do
|
89
|
+
branch = fetch(:branch)
|
90
|
+
unless `git rev-parse HEAD` == `git rev-parse origin/#{branch}`
|
91
|
+
puts "WARNING: HEAD is not the same as origin/#{branch}"
|
92
|
+
puts "Run `git push` to sync changes or make sure you've"
|
93
|
+
puts "checked out the branch: #{branch} as you can only deploy"
|
94
|
+
puts "if you've got the target branch checked out"
|
95
|
+
exit
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
desc 'compiles assets locally then rsyncs'
|
100
|
+
task :compile_assets_locally do
|
101
|
+
run_locally do
|
102
|
+
execute "RAILS_ENV=#{fetch(:rails_env)} bundle exec rake assets:precompile"
|
103
|
+
end
|
104
|
+
on roles(:app) do |role|
|
105
|
+
run_locally do
|
106
|
+
execute "rsync -av ./public/assets/ #{role.user}@#{role.hostname}:#{release_path}/public/assets/;"
|
107
|
+
end
|
108
|
+
sudo "chmod -R 755 #{release_path}/public/assets/"
|
109
|
+
end
|
110
|
+
run_locally do
|
111
|
+
execute 'rm -rf ./public/assets'
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
desc 'Run the full tests on the deployed app. To deploy without tests, try cap deploy:without_tests or cap -S run_tests=0 deploy'
|
116
|
+
task :run_tests do
|
117
|
+
unless fetch(:run_tests, '1') == '0'
|
118
|
+
run "cd #{release_path} && rake db:test:prepare"
|
119
|
+
run "cd #{release_path} && nice -n 10 rake RAILS_ENV=production test"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
desc 'deploy without running tests'
|
124
|
+
task :without_tests do
|
125
|
+
set(:run_tests, '0')
|
126
|
+
deploy.default
|
127
|
+
end
|
128
|
+
|
129
|
+
task :set_branch_info_file do
|
130
|
+
on roles(:app) do
|
131
|
+
run "cd #{release_path} && echo \"#{branch}\" > CURRENT_BRANCH"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
namespace :cache do
|
136
|
+
desc "Flush cache"
|
137
|
+
task :clear do
|
138
|
+
on roles(:app) do
|
139
|
+
run "cd #{current_path} && #{rake} cache:clear RAILS_ENV=#{rails_env}"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
desc 'Show deployed revision'
|
145
|
+
task :revision do
|
146
|
+
on roles(:app) do
|
147
|
+
run "cat #{current_path}/REVISION"
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
desc 'Show currently deployed revision on server.'
|
152
|
+
task :revisions do
|
153
|
+
on roles(:app) do
|
154
|
+
current, previous, latest = current_revision[0, 7], previous_revision[0, 7], real_revision[0, 7]
|
155
|
+
puts "\n" << "-"*63
|
156
|
+
puts "===== Master Revision: \033[1;33m#{latest}\033[0m\n\n"
|
157
|
+
puts "===== [ \033[1;36m#{application.capitalize} - #{stage.to_s.capitalize}\033[0m ]"
|
158
|
+
puts "=== Deployed Revision: \033[1;32m#{current}\033[0m"
|
159
|
+
puts "=== Previous Revision: \033[1;32m#{previous}\033[0m\n\n"
|
160
|
+
|
161
|
+
# If deployed and master are the same, show the difference between the last 2 deployments.
|
162
|
+
base_label, new_label, base_rev, new_rev = latest != current ? \
|
163
|
+
['deployed', 'master', current, latest] : \
|
164
|
+
['previous', 'deployed', previous, current]
|
165
|
+
|
166
|
+
# Fetch the difference between master and deployed revisions.
|
167
|
+
log_cmd = "#{source.log(previous, latest).gsub(/^git/, 'git --no-pager')} --oneline"
|
168
|
+
cfg = File.join(shared_path, strategy.configuration[:repository_cache] || "cached-copy")
|
169
|
+
|
170
|
+
diff = ''
|
171
|
+
run %Q{cd "#{cfg}" && #{log_cmd}} do |channel, stream, data|
|
172
|
+
diff = data
|
173
|
+
end
|
174
|
+
|
175
|
+
# Show difference between master and deployed revisions.
|
176
|
+
if diff != ""
|
177
|
+
# Colorize refs
|
178
|
+
diff.gsub!(/^([a-f0-9]+) /, "\033[1;32m\\1\033[0m - ")
|
179
|
+
diff = " " << diff.gsub("\n", "\n ") << "\n"
|
180
|
+
# Indent commit messages nicely, max 80 chars per line, line has to end with space.
|
181
|
+
diff = diff.split("\n").map { |l| l.scan(/.{1,80}/).join("\n"<<" "*14).gsub(/([^ ]*)\n {14}/m, "\n"<<" "*14<<"\\1") }.join("\n")
|
182
|
+
puts "=== Difference between #{base_label} revision and #{new_label} revision:\n\n"
|
183
|
+
puts diff
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
#after 'deploy', 'revisions'
|
188
|
+
|
189
|
+
after :finishing, 'deploy:cleanup'
|
190
|
+
after 'deploy:publishing', 'deploy:restart'
|
191
|
+
after 'deploy:symlink:shared', 'deploy:compile_assets_locally'
|
192
|
+
#after('deploy:compile_assets', 'deploy:build_missing_paperclip_styles')
|
193
|
+
|
194
|
+
# make sure we're deploying what we think we're deploying
|
195
|
+
# before :deploy, 'deploy:check_revision'
|
196
|
+
|
197
|
+
# only allow a deploy with passing tests to deployed
|
198
|
+
# before :deploy, 'deploy:run_tests'
|
199
|
+
|
200
|
+
# setup section
|
201
|
+
#
|
202
|
+
# # remove the default nginx configuration as it will tend
|
203
|
+
# # to conflict with our configs.
|
204
|
+
# before 'deploy:setup_config', 'nginx:remove_default_vhost'
|
205
|
+
#
|
206
|
+
# # reload nginx to it will pick up any modified vhosts from
|
207
|
+
# # setup_config
|
208
|
+
# after 'deploy:setup_config', 'nginx:reload'
|
209
|
+
|
210
|
+
# whether we're using ssl or not, used for building nginx
|
211
|
+
# config file
|
212
|
+
# set :enable_ssl, false
|
213
|
+
|
214
|
+
#
|
215
|
+
# set :nginx_protocol, :
|
216
|
+
#
|
217
|
+
# if you want to remove the dump file after loading
|
218
|
+
# set :db_local_clean, true
|
219
|
+
end
|
data/lib/caploy/recipes/info.rb
CHANGED
@@ -1,38 +1,34 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
namespace :info do
|
4
|
-
desc <<-DESC
|
1
|
+
namespace :info do
|
2
|
+
desc <<-DESC
|
5
3
|
Tail all or a single remote file
|
6
4
|
|
7
5
|
The logfile can be specified with a LOGFILE-environment variable.
|
8
6
|
It defaults to RAILS_ENV.log
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
7
|
+
DESC
|
8
|
+
task :tail, :roles => :app do
|
9
|
+
ENV["LOGFILE"] ||= "#{rails_env}.log"
|
10
|
+
begin
|
11
|
+
stream "tail -f #{shared_path}/log/#{ENV["LOGFILE"]}"
|
12
|
+
rescue Interrupt
|
13
|
+
puts "\n--interrupted by user--"
|
14
|
+
puts ''
|
18
15
|
end
|
16
|
+
end
|
19
17
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
puts ""
|
26
|
-
puts " AppName: #{fetch(:application)}"
|
27
|
-
puts " Version: #{rev}"
|
28
|
-
puts " Release: #{rel}"
|
29
|
-
puts ""
|
30
|
-
end
|
18
|
+
desc 'Display the currently deployed Application, Revision and Release'
|
19
|
+
task :version, :roles => :app, :except => { :no_release => true } do
|
20
|
+
rev = current_revision
|
21
|
+
rel = current_release.split('/').pop
|
31
22
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
23
|
+
puts ""
|
24
|
+
puts " AppName: #{fetch(:application)}"
|
25
|
+
puts " Version: #{rev}"
|
26
|
+
puts " Release: #{rel}"
|
27
|
+
puts ""
|
36
28
|
end
|
37
29
|
|
30
|
+
desc "Display the uname"
|
31
|
+
task :uname do
|
32
|
+
run "uname -a"
|
33
|
+
end
|
38
34
|
end
|
@@ -1,17 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
task step do
|
7
|
-
try_sudo "service memcached #{step}"
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
desc "Flush memcache"
|
12
|
-
task :flush do
|
13
|
-
run %Q{echo "flush_all" | nc -q 2 127.0.0.1 11211}
|
1
|
+
namespace :memcache do
|
2
|
+
%w(start stop restart status).each do |step|
|
3
|
+
desc "#{step} memcache"
|
4
|
+
task step do
|
5
|
+
try_sudo "service memcached #{step}"
|
14
6
|
end
|
15
7
|
end
|
16
8
|
|
9
|
+
desc "Flush memcache"
|
10
|
+
task :flush do
|
11
|
+
run %Q{echo "flush_all" | nc -q 2 127.0.0.1 11211}
|
12
|
+
end
|
17
13
|
end
|