capifony 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/CHANGELOG +7 -0
  2. data/README +24 -0
  3. data/lib/capifony.rb +135 -2
  4. metadata +18 -4
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ == 0.2.0 / June 5, 2010
2
+
3
+ * some fixes
4
+ * symfony:check_configuration task
5
+ * database move tasks
6
+ * shared folder tasks (move to_local, move to_remote)
7
+
1
8
  == 0.1.0 / June 3, 2010
2
9
 
3
10
  First ever working version.
data/README CHANGED
@@ -47,6 +47,8 @@ To deploy your application, simply run:
47
47
 
48
48
  cap deploy
49
49
 
50
+ ### Deployment ###
51
+
50
52
  To configure database on production environment, run:
51
53
 
52
54
  cap symfony:configure:database
@@ -61,6 +63,28 @@ Now, whenever you need to deploy a new version of your code, just run:
61
63
 
62
64
  cap deploy
63
65
 
66
+ ### Databases ###
67
+
68
+ If you need to dump remote database & populate this dump on local machine, run:
69
+
70
+ cap database:move:to_local
71
+
72
+ If you need to dump local database & populate this dump on remote server, run:
73
+
74
+ cap database:move:to_remote
75
+
76
+ ### Shared folders ###
77
+
78
+ If you need to download some shared folders from remote server, run:
79
+
80
+ cap shared:{databases OR log OR uploads]:to_local
81
+
82
+ If you need to upload some shared folders to remote server, run:
83
+
84
+ cap shared:{databases OR log OR uploads]:to_remote
85
+
86
+ ### Other tasks ###
87
+
64
88
  If you need to deploy and run your migrations you can call:
65
89
 
66
90
  cap deploy:migrations
data/lib/capifony.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'yaml'
2
+
1
3
  # Dirs that need to remain the same between deploys (shared dirs)
2
4
  set :shared_children, %w(log web/uploads)
3
5
 
@@ -8,6 +10,23 @@ def prompt_with_default(var, default)
8
10
  set var, default if eval("#{var.to_s}.empty?")
9
11
  end
10
12
 
13
+ def load_database_config(data, env = 'prod')
14
+ databases = YAML::load(data)
15
+
16
+ if databases[env]
17
+ db_param = databases[env]['doctrine']['param']
18
+ else
19
+ db_param = databases['all']['doctrine']['param']
20
+ end
21
+
22
+ {
23
+ 'type' => /(\w+)\:/.match(db_param['dsn'])[1],
24
+ 'user' => db_param['username'],
25
+ 'pass' => db_param['password'],
26
+ 'db' => /dbname=([^;$]+)/.match(db_param['dsn'])[1]
27
+ }
28
+ end
29
+
11
30
  namespace :deploy do
12
31
  desc "Overwrite the start task to set the permissions on the project."
13
32
  task :start do
@@ -36,7 +55,7 @@ namespace :deploy do
36
55
  end
37
56
  end
38
57
 
39
- run "touch #{shared_path}/databases.yml"
58
+ run "mkdir #{shared_path}/config && touch #{shared_path}/config/databases.yml"
40
59
  end
41
60
 
42
61
  desc "Customize the finalize_update task to work with symfony."
@@ -70,11 +89,20 @@ end
70
89
  namespace :symlink do
71
90
  desc "Symlink the database"
72
91
  task :db do
73
- run "ln -nfs #{shared_path}/databases.yml #{latest_release}/config/databases.yml"
92
+ run "ln -nfs #{shared_path}/config/databases.yml #{latest_release}/config/databases.yml"
74
93
  end
75
94
  end
76
95
 
77
96
  namespace :symfony do
97
+ desc "Downloads & runs check_configuration.php on remote"
98
+ task :check_configuration do
99
+ prompt_with_default(:version, "1.4")
100
+
101
+ run "wget http://sf-to.org/#{version}/check.php -O /tmp/check_configuration.php"
102
+ run "php /tmp/check_configuration.php"
103
+ run "rm /tmp/check_configuration.php"
104
+ end
105
+
78
106
  desc "Clears the cache"
79
107
  task :cc do
80
108
  run "php #{latest_release}/symfony cache:clear"
@@ -170,6 +198,111 @@ namespace :doctrine do
170
198
  end
171
199
  end
172
200
 
201
+ namespace :database do
202
+ namespace :move do
203
+ desc "Dump remote database, download it to local & populate here"
204
+ task :to_local do
205
+ filename = "#{application}.local_dump.#{Time.now.to_i}.sql.bz2"
206
+ file = "/tmp/#{filename}"
207
+ sqlfile = "#{application}_dump.sql"
208
+ config = ""
209
+
210
+ run "cat #{shared_path}/config/databases.yml" do |ch, st, data|
211
+ config = load_database_config data, 'prod'
212
+ end
213
+
214
+ case config['type']
215
+ when 'mysql'
216
+ run "mysqldump -u#{config['user']} --password='#{config['pass']}' #{config['db']} | bzip2 -c > #{file}" do |ch, stream, data|
217
+ puts data
218
+ end
219
+ end
220
+
221
+ `mkdir -p backups`
222
+ get file, "backups/#{filename}"
223
+ run "rm #{file}"
224
+
225
+ config = load_database_config IO.read('config/databases.yml'), 'dev'
226
+
227
+ `bunzip2 -kc backups/#{filename} > backups/#{sqlfile}`
228
+ case config['type']
229
+ when 'mysql'
230
+ `mysql -u#{config['user']} --password='#{config['pass']}' #{config['db']} < backups/#{sqlfile}`
231
+ end
232
+ `rm backups/#{sqlfile}`
233
+ end
234
+
235
+ desc "Dump local database, load it to remote & populate there"
236
+ task :to_remote do
237
+ filename = "#{application}.local_dump.#{Time.now.to_i}.sql.bz2"
238
+ file = "backups/#{filename}"
239
+ config = load_database_config IO.read('config/databases.yml'), 'dev'
240
+ sqlfile = "#{application}_dump.sql"
241
+
242
+ `mkdir -p backups`
243
+ case config['type']
244
+ when 'mysql'
245
+ `mysqldump -u#{config['user']} --password='#{config['pass']}' #{config['db']} | bzip2 -c > #{file}`
246
+ end
247
+
248
+ upload(file, "/tmp/#{filename}", :via => :scp)
249
+ run "bunzip2 -kc /tmp/#{filename} > /tmp/#{sqlfile}"
250
+
251
+ run "cat #{shared_path}/config/databases.yml" do |ch, st, data|
252
+ config = load_database_config data, 'prod'
253
+ end
254
+
255
+ case config['type']
256
+ when 'mysql'
257
+ run "mysql -u#{config['user']} --password='#{config['pass']}' #{config['db']} < /tmp/#{sqlfile}" do |ch, stream, data|
258
+ puts data
259
+ end
260
+ end
261
+
262
+ run "rm /tmp/#{filename}"
263
+ run "rm /tmp/#{sqlfile}"
264
+ end
265
+ end
266
+ end
267
+
268
+ namespace :shared do
269
+ namespace :databases do
270
+ desc "Download config/databases.yml from remote server"
271
+ task :to_local do
272
+ download("#{shared_path}/config/databases.yml", "config/databases.yml", :via => :scp)
273
+ end
274
+
275
+ desc "Upload config/databases.yml to remote server"
276
+ task :to_remote do
277
+ upload("config/databases.yml", "#{shared_path}/config/databases.yml", :via => :scp)
278
+ end
279
+ end
280
+
281
+ namespace :log do
282
+ desc "Download all logs from remote folder to local one"
283
+ task :to_local do
284
+ download("#{shared_path}/log", "./", :via => :scp, :recursive => true)
285
+ end
286
+
287
+ desc "Upload all logs from local folder to remote one"
288
+ task :to_remote do
289
+ upload("log", "#{shared_path}/", :via => :scp, :recursive => true)
290
+ end
291
+ end
292
+
293
+ namespace :uploads do
294
+ desc "Download all files from remote web/uploads folder to local one"
295
+ task :to_local do
296
+ download("#{shared_path}/web/uploads", "web", :via => :scp, :recursive => true)
297
+ end
298
+
299
+ desc "Upload all files from local web/uploads folder to remote one"
300
+ task :to_remote do
301
+ upload("web/uploads", "#{shared_path}/web", :via => :scp, :recursive => true)
302
+ end
303
+ end
304
+ end
305
+
173
306
  after "deploy:finalize_update", # After finalizing update:
174
307
  "symlink:db", # 1. Symlink database
175
308
  "symfony:cc", # 2. Clear cache
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capifony
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Konstantin Kudryashov
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-03 00:00:00 +03:00
18
+ date: 2010-06-05 00:00:00 +03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -34,6 +34,20 @@ dependencies:
34
34
  version: 2.5.10
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: yaml
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :runtime
50
+ version_requirements: *id002
37
51
  description: " Capistrano is an open source tool for running scripts on multiple servers. It\xE2\x80\x99s primary use is for easily deploying applications. While it was built specifically for deploying Rails apps, it\xE2\x80\x99s pretty simple to customize it to deploy other types of applications. This package is a deployment \xE2\x80\x9Crecipe\xE2\x80\x9D to work with symfony PHP applications.\n"
38
52
  email: ever.zet@gmail.com
39
53
  executables: