capifony 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +7 -0
- data/README +24 -0
- data/lib/capifony.rb +135 -2
- metadata +18 -4
data/CHANGELOG
CHANGED
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:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 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-
|
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:
|