bonethug 0.0.23 → 0.0.24

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -12,11 +12,11 @@ Add this line to your application's Gemfile:
12
12
 
13
13
  And then execute:
14
14
 
15
- \$ bundle
15
+ bundle
16
16
 
17
17
  Or install it yourself as:
18
18
 
19
- \$ gem install bonethug
19
+ gem install bonethug
20
20
 
21
21
  Usage
22
22
  -----
@@ -33,7 +33,7 @@ Usage
33
33
 
34
34
 
35
35
 
36
- **Add bonethug to an existing project **
36
+ **Add bonethug to an existing project**
37
37
 
38
38
  *If you just want to use the deploy / cron / backup framework*
39
39
 
@@ -65,16 +65,18 @@ argument*
65
65
  *Uses astrails-safe to make a backup using the .bonethug/backup.rb file. Uses
66
66
  the info contained in cnf.yml*
67
67
 
68
- `bonethug backup {development|staging|production}`
68
+ `bonethug local-backup {development|staging|production}`
69
69
 
70
70
 
71
71
 
72
72
  ### Remote Commands
73
73
 
74
- For these commands to work you need to have the desired host already added to
75
- your known hosts file: ~/.ssh/known_hosts which means you can either connect to
76
- the host first, manually add it or switch off the checking by adding the
77
- following to ~/.ssh/config.
74
+ Most of these are piped through mina. Mina uses SSH to send a bash script to
75
+ the remote server where it is executed. For these commands to work you need to
76
+ have the desired host already added to your known hosts file:
77
+ ~/.ssh/known_hosts which means you can either connect to the host first,
78
+ manually add it or switch off the checking by adding the following to
79
+ ~/.ssh/config.
78
80
 
79
81
 
80
82
 
@@ -95,7 +97,7 @@ Host *
95
97
 
96
98
 
97
99
 
98
- **Trigger a Backup from the Remote Server**
100
+ **Trigger a Snapshot Backup from the Remote Server**
99
101
 
100
102
  *This wraps mina and runs the backup task in the local .bonethug/deploy.rb file.
101
103
  It calls astrails-safe on the remote server and using the remote
@@ -105,6 +107,22 @@ backup.*
105
107
 
106
108
  `bonethug remote-backup {develoment|staging|production}`
107
109
 
110
+
111
+
112
+ **Trigger a Sync to or from the Remote Sync Location**
113
+
114
+ *This wraps mina and runs rsync on the remote server. It uses the info defined
115
+ in the local copy of config/cnf.yml under backup.rsync. If you have already set
116
+ up an ssh key with no pass on the remote server so it can talk to the sync
117
+ location then you wont need to provide a pass in the cnf.yml. this is prefereed
118
+ as it keeps the password out of the log files.*
119
+
120
+ BE CAREFUL USING SYNC-TO - if there are no files in the source location it will wipe the files from your deploy copy.
121
+
122
+ `bonethug sync-from {develoment|staging|production}`
123
+
124
+ `bonethug sync-to {develoment|staging|production}`
125
+
108
126
 
109
127
 
110
128
 
data/config/cnf.yml CHANGED
@@ -8,6 +8,7 @@ deploy:
8
8
  domain: domain.com
9
9
  user: root
10
10
  port: 22
11
+ keep: 2
11
12
  environments:
12
13
  development:
13
14
  staging:
data/config/deploy.rb CHANGED
@@ -4,9 +4,14 @@
4
4
  # - review directory permissions
5
5
  # - passenger executes rails as the user that owns evironment.rb - if root owns it it runs as nobody
6
6
  # - certain parts break if it can't find the config entries - should just check for them and skip if it can't find them
7
+ # - we run into problems if there is stuff that needs to be tracked by git in the vendor dirs
8
+ # -> if we add vendor to the shared paths stuff doesn't get updated properly
9
+ # -> if we dont it means that composer downloads stuff every deployment
10
+ # -> looks like composer breaks if we use symlniked paths
7
11
 
8
12
  # Requires
9
13
  # ---------------------------------------------------------------
14
+
10
15
  require 'rubygems'
11
16
  require 'bonethug/conf'
12
17
  require 'mina/bundler'
@@ -30,7 +35,7 @@ raise 'could not find deployment environment' unless conf.get('deploy.environmen
30
35
  deploy = conf.node_merge('deploy.common','deploy.environments.'+env)
31
36
  resources = conf.get('resources','Array') || []
32
37
  log_dirs = conf.get('log_dirs','Array') || []
33
- vendor_dirs = conf.get('vendor','Array') || []
38
+ vendor = conf.get('vendor','Array') || []
34
39
 
35
40
  # vhost name
36
41
  vhost = deploy.get('project_slug') + '_' + env
@@ -46,10 +51,11 @@ resources += ['backups']
46
51
  log_dirs.push 'log' unless log_dirs.include? 'log'
47
52
 
48
53
  # shared paths
49
- shared = resources + log_dirs + vendor_dirs + ['tmp']
54
+ shared = resources + log_dirs + vendor + ['tmp']
50
55
  shared.push 'composer.phar' if use_composer
51
56
 
52
57
  # shared config
58
+ set :keep, deploy.get('keep') || 2
53
59
  set :deploy_to, deploy.get('base_dir') + '/' + vhost
54
60
  set :repository, deploy.get('repository')
55
61
  set :branch, ENV['branch'] || deploy.get('default_branch')
@@ -72,7 +78,7 @@ desc "Sets up the Project"
72
78
  task :setup => :environment do
73
79
 
74
80
  # make shared resource dirs
75
- (resources + log_dirs + vendor_dirs).each do |path|
81
+ (resources + log_dirs + vendor).each do |path|
76
82
  queue! %[mkdir -p "#{deploy_to}/shared/#{path}"]
77
83
  end
78
84
 
@@ -126,12 +132,14 @@ end
126
132
 
127
133
  desc "Syncs files to a location"
128
134
  task :sync_from => :environment do
129
- if rsync = conf.get('backup.rsync')
135
+ if rsync = conf.get('backup.rsync')
130
136
  path = deploy.get('project_slug') + "_" + env + "_sync"
131
137
  ssh_pass = rsync.get('pass') ? "sshpass -p #{rsync.get('pass')}" : ""
132
138
  queue! %[#{ssh_pass} ssh #{rsync.get('user')}@#{rsync.get('host')} mkdir -p #{path}]
133
139
  (resources + log_dirs).each do |item|
140
+
134
141
  queue! %[cd #{deploy_to}/current && rsync -r -a -v -e "#{ssh_pass} ssh -l #{rsync.get('user')}" --delete --copy-dirlinks ./#{item} #{rsync.get('host')}:#{path}/]
142
+
135
143
  end
136
144
  else
137
145
  raise 'no rsync conf'
@@ -145,7 +153,9 @@ task :sync_to => :environment do
145
153
  ssh_pass = rsync.get('pass') ? "sshpass -p #{rsync.get('pass')}" : ""
146
154
  queue! %[#{ssh_pass} ssh #{rsync.get('user')}@#{rsync.get('host')} mkdir -p #{path}]
147
155
  (resources + log_dirs).each do |item|
156
+
148
157
  queue! %[cd #{deploy_to}/current && rsync -r -a -v -e "#{ssh_pass} ssh -l #{rsync.get('user')}" --delete --copy-dirlinks #{rsync.get('host')}:#{path}/#{item} ./]
158
+
149
159
  end
150
160
  else
151
161
  raise 'no rsync conf'
data/config/syncer.rb ADDED
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Requires
4
+ # ---------------------------------------------------------------
5
+ require 'rubygems'
6
+ require 'bonethug/conf'
7
+
8
+ # Config
9
+ # ---------------------------------------------------------------
10
+
11
+ # load the conf
12
+ conf = Bonethug::Conf.new
13
+ cnf = conf.to_hash
14
+
15
+ # args
16
+ env = ARGV[1]
17
+ type = ARGV[0]
18
+
19
+ # pull config from environment vars
20
+ raise 'could not find deployment environment' unless conf.get('deploy.environments').has_key? env
21
+
22
+ # build config
23
+ deploy = conf.node_merge('deploy.common','deploy.environments.'+env)
24
+ resources = conf.get('resources','Array') || []
25
+ log_dirs = conf.get('log_dirs','Array') || []
26
+ vendor = conf.get('vendor','Array') || []
27
+
28
+ # vhost name
29
+ vhost = deploy.get('project_slug') + '_' + env
30
+
31
+ # composer?
32
+ use_composer = ['silverstripe','silverstripe3','drupal','php'].include? deploy.get('project_type')
33
+
34
+ # directories we need to track
35
+ resources += ['backups']
36
+
37
+ # logs
38
+ log_dirs.push 'log' unless log_dirs.include? 'log'
39
+
40
+ # do the common work
41
+ path = deploy.get('base_dir') + '/' + vhost
42
+ ssh_pass = rsync.get('pass') ? "sshpass -p #{rsync.get('pass')}" : ""
43
+ queue! %[#{ssh_pass} ssh #{rsync.get('user')}@#{rsync.get('host')} mkdir -p #{path}]
44
+
45
+ (resources + log_dirs).each do |item|
46
+ case type
47
+ when "sync-local-from"
48
+ exec "rsync -r -a -v -e \"#{ssh_pass} ssh -l #{rsync.get('user')}\" --delete --copy-dirlinks #{rsync.get('host')}:#{path}/current/#{item} ./"
49
+ when "sync-local-to"
50
+ exec "rsync -r -a -v -e \"#{ssh_pass} ssh -l #{rsync.get('user')}\" --delete --copy-dirlinks ./#{item} #{rsync.get('host')}:#{path}/current/"
51
+ end
52
+ end
data/lib/bonethug/cli.rb CHANGED
@@ -41,7 +41,7 @@ module Bonethug
41
41
  # run the initaliser
42
42
  Installer.bonethugise(location, task.to_sym)
43
43
 
44
- when 'deploy', 'setup', 'remote-backup', 'local-backup', 'sync-to', 'sync-from'
44
+ when 'deploy', 'setup', 'remote-backup', 'local-backup', 'sync-backup-to', 'sync-backup-from', 'sync-local-to', 'sync-local-from'
45
45
 
46
46
  # handle args
47
47
  environment = ARGV[1]
@@ -53,18 +53,29 @@ module Bonethug
53
53
  end
54
54
 
55
55
  case task
56
+
57
+ # Setup and Deploy
56
58
  when 'deploy'
57
59
  exec "export to=#{environment} && bundle exec mina -f .bonethug/deploy.rb deploy --verbose"
58
60
  when 'setup'
59
61
  exec "export to=#{environment} && bundle exec mina -f .bonethug/deploy.rb setup --verbose"
62
+
63
+ # Snapshot Backup
60
64
  when 'remote-backup'
61
65
  exec "export to=#{environment} && bundle exec mina -f .bonethug/deploy.rb backup --verbose"
62
66
  when 'local-backup'
63
67
  exec "export to=#{environment} && bundle exec astrails-safe .bonethug/backup.rb"
64
- when 'sync-to'
68
+
69
+ # Synchronised backup
70
+ when 'sync-backup-to'
65
71
  exec "export to=#{environment} && bundle exec mina -f .bonethug/deploy.rb sync_to --verbose"
66
- when 'sync-from'
67
- exec "export to=#{environment} && bundle exec mina -f .bonethug/deploy.rb sync_from --verbose"
72
+ when 'sync-backup-from'
73
+ exec "export to=#{environment} && bundle exec mina -f .bonethug/deploy.rb sync_from --verbose"
74
+
75
+ when 'sync-local-to'
76
+ exec "ruby .bonethug/syncer.rb sync_local_to #{environment}"
77
+ when 'sync-local-from'
78
+ exec "ruby .bonethug/syncer.rb sync_local_from #{environment}"
68
79
  end
69
80
 
70
81
  when 'watch'
@@ -1,3 +1,3 @@
1
1
  module Bonethug
2
- VERSION = "0.0.23"
2
+ VERSION = "0.0.24"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bonethug
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.23
4
+ version: 0.0.24
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-03 00:00:00.000000000 Z
12
+ date: 2013-09-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -287,6 +287,7 @@ files:
287
287
  - config/cnf.yml
288
288
  - config/deploy.rb
289
289
  - config/schedule.rb
290
+ - config/syncer.rb
290
291
  - lib/bonethug.rb
291
292
  - lib/bonethug/cli.rb
292
293
  - lib/bonethug/conf.rb