capcake 0.0.4 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +32 -5
- data/lib/capcake.rb +49 -42
- data/lib/templates/deploy.rb.default +43 -0
- metadata +22 -12
- data/lib/TODO +0 -7
data/README.markdown
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# capcake
|
1
|
+
# capcake 
|
2
2
|
|
3
3
|
Looking to deploy a [CakePHP](http://cakephp.org) application you've built? Capcake extends [Capistrano](http://capify.org), removing the *rails-ism*, replacing them by more *cake-ish* ones.
|
4
4
|
|
@@ -51,9 +51,7 @@ We need to tell it where to deploy, using what methods:
|
|
51
51
|
|
52
52
|
And finally, some CakePHP related settings (if omitted, Capcake will NOT handle deploying CakePHP):
|
53
53
|
|
54
|
-
set :cake_branch, "
|
55
|
-
|
56
|
-
For this to work, *deployer*'s SSH keys must be added to the [Chaw](http://thechaw.com/users/account).
|
54
|
+
set :cake_branch, " "
|
57
55
|
|
58
56
|
You can change the default values for the following variables also:
|
59
57
|
|
@@ -62,6 +60,20 @@ You can change the default values for the following variables also:
|
|
62
60
|
set :user, "your_username"
|
63
61
|
set :branch, "tag"
|
64
62
|
|
63
|
+
Append the following lines to your .git/info/exclude file:
|
64
|
+
|
65
|
+
.DS_Store
|
66
|
+
tmp/*
|
67
|
+
|
68
|
+
## Alternative Easy Configuration
|
69
|
+
|
70
|
+
Simply replace your deploy.rb configuration file with the one provided in the template directory, and change all variables on the lines that have comments with your values.
|
71
|
+
|
72
|
+
This configuration file is meant to work with [Multiple Stages Without Multistage Extension](https://github.com/capistrano/capistrano/wiki/2.x-Multiple-Stages-Without-Multistage-Extension) so every cap command will have to contain the stage you want to deploy to. For instance:
|
73
|
+
|
74
|
+
$ cap staging deploy:setup
|
75
|
+
$ cap staging deploy
|
76
|
+
|
65
77
|
## Deployment
|
66
78
|
|
67
79
|
The first time you are deploying, you need to run:
|
@@ -94,6 +106,21 @@ Which will change the directory structure to become:
|
|
94
106
|
[deploy_to]/shared/system
|
95
107
|
[deploy_to]/shared/tmp
|
96
108
|
|
109
|
+
## Credits
|
110
|
+
|
111
|
+
* Jamis Buck ([Capistrano's](https://github.com/capistrano) original author)
|
112
|
+
* [Jad Bitar](http://github.com/jadb) (capcake code)
|
113
|
+
* [damusnet](https://github.com/damusnet) (capcake code)
|
114
|
+
* [Michael Franze](http://github.com/franzem) (capcake wiki)
|
115
|
+
|
116
|
+
## Patches & Features
|
117
|
+
|
118
|
+
* Fork
|
119
|
+
* Mod, fix
|
120
|
+
* Test - this is important, so it's not unintentionally broken
|
121
|
+
* Commit - do not mess with license, todo, version, etc. (if you do change any, make them into commits of their own that I can ignore when I pull)
|
122
|
+
* Pull request - bonus point for topic branches
|
123
|
+
|
97
124
|
## Bugs & Feedback
|
98
125
|
|
99
|
-
http://github.com/jadb/capcake/issues
|
126
|
+
http://github.com/jadb/capcake/issues
|
data/lib/capcake.rb
CHANGED
@@ -28,32 +28,36 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
28
28
|
# changes if you do decide to muck with these!
|
29
29
|
# =========================================================================
|
30
30
|
|
31
|
+
set :cake2, true
|
31
32
|
set :scm, :git
|
32
33
|
set :git_enable_submodules, 1
|
33
|
-
set :revision, source.head
|
34
34
|
set :deploy_via, :checkout
|
35
|
-
set :shared_children, %w(config system tmp)
|
36
35
|
|
37
36
|
set :git_flag_quiet, ""
|
38
37
|
|
39
38
|
_cset(:cake_branch) { "" }
|
40
|
-
_cset(:cake_repo)
|
39
|
+
_cset(:cake_repo) { "git://github.com/cakephp/cakephp.git" }
|
41
40
|
_cset :tmp_children, %w(cache logs sessions tests)
|
42
41
|
_cset :cache_children, %w(models persistent views)
|
43
42
|
_cset :logs_files, %w(debug error)
|
44
43
|
|
45
44
|
def capcake()
|
46
|
-
set :deploy_to,
|
45
|
+
set :deploy_to, "/var/www/#{application}" if (deploy_to.empty?)
|
47
46
|
set(:current_path) { File.join(deploy_to, current_dir) }
|
48
|
-
|
47
|
+
if cake2
|
48
|
+
set :shared_children, %w(Config System tmp)
|
49
|
+
set :database_partial_path, "Config/database.php"
|
50
|
+
else
|
51
|
+
set :shared_children, %w(config system tmp)
|
52
|
+
set :database_partial_path, "config/database.php"
|
53
|
+
end
|
54
|
+
set(:database_path) { File.join(shared_path, database_partial_path) }
|
49
55
|
set(:shared_path) { File.join(deploy_to, shared_dir) }
|
50
56
|
_cset(:cake_path) { shared_path }
|
51
57
|
_cset(:tmp_path) { File.join(shared_path, "tmp") }
|
52
58
|
_cset(:cache_path) { File.join(tmp_path, "cache") }
|
53
59
|
_cset(:logs_path) { File.join(tmp_path, "logs") }
|
54
60
|
|
55
|
-
after("deploy:setup", "cake:database:config") if (!remote_file_exists?(database_path))
|
56
|
-
after("deploy:symlink", "cake:database:symlink") if (remote_file_exists?(database_path))
|
57
61
|
end
|
58
62
|
|
59
63
|
def defaults(val, default)
|
@@ -73,9 +77,9 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
73
77
|
|
74
78
|
namespace :deploy do
|
75
79
|
desc <<-DESC
|
76
|
-
Deploys your project. This calls `update
|
80
|
+
Deploys your project. This calls `update`. Note that \
|
77
81
|
this will generally only work for applications that have already been deployed \
|
78
|
-
once. For a "cold" deploy, you'll want to take a look at the `deploy:cold
|
82
|
+
once. For a "cold" deploy, you'll want to take a look at the `deploy:cold` \
|
79
83
|
task, which handles the cold start specifically.
|
80
84
|
DESC
|
81
85
|
task :default do
|
@@ -84,7 +88,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
84
88
|
desc <<-DESC
|
85
89
|
Prepares one or more servers for deployment. Before you can use any \
|
86
90
|
of the Capistrano deployment tasks with your project, you will need to \
|
87
|
-
make sure all of your servers have been prepared with `cap deploy:setup
|
91
|
+
make sure all of your servers have been prepared with `cap deploy:setup`. When \
|
88
92
|
you add a new server to your cluster, you can easily run the setup task \
|
89
93
|
on just that server by specifying the HOSTS environment variable:
|
90
94
|
|
@@ -101,20 +105,22 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
101
105
|
run "#{try_sudo} mkdir -p #{(dirs + tmp_dirs).join(' ')} && #{try_sudo} chmod -R 777 #{tmp_path}" if (!user.empty?)
|
102
106
|
set :git_flag_quiet, "-q "
|
103
107
|
cake.setup if (!cake_branch.empty?)
|
108
|
+
cake.database.config if (!remote_file_exists?(database_path))
|
104
109
|
end
|
105
110
|
|
106
111
|
desc <<-DESC
|
107
112
|
Copies your project and updates the symlink. It does this in a \
|
108
|
-
transaction, so that if either `update_code
|
113
|
+
transaction, so that if either `update_code` or `symlink` fail, all \
|
109
114
|
changes made to the remote servers will be rolled back, leaving your \
|
110
|
-
system in the same state it was in before `update
|
111
|
-
you will want to call `deploy
|
115
|
+
system in the same state it was in before `update` was invoked. Usually, \
|
116
|
+
you will want to call `deploy` instead of `update`, but `update` can be \
|
112
117
|
handy if you want to deploy, but not immediately restart your application.
|
113
118
|
DESC
|
114
119
|
task :update do
|
115
120
|
transaction do
|
116
121
|
update_code
|
117
122
|
symlink
|
123
|
+
cake.cache.clear
|
118
124
|
end
|
119
125
|
end
|
120
126
|
|
@@ -122,8 +128,8 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
122
128
|
Copies your project to the remote servers. This is the first stage \
|
123
129
|
of any deployment; moving your updated code and assets to the deployment \
|
124
130
|
servers. You will rarely call this task directly, however; instead, you \
|
125
|
-
should call the `deploy
|
126
|
-
task (if you want to perform the `restart
|
131
|
+
should call the `deploy` task (to do a complete deploy) or the `update` \
|
132
|
+
task (if you want to perform the `restart` task separately).
|
127
133
|
|
128
134
|
You will need to make sure you set the :scm variable to the source \
|
129
135
|
control software you are using (it defaults to :subversion), and the \
|
@@ -137,19 +143,8 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
137
143
|
end
|
138
144
|
|
139
145
|
desc <<-DESC
|
140
|
-
[internal]
|
141
|
-
|
142
|
-
so if you are deploying something else, you may want to override this \
|
143
|
-
task with your own environment's requirements.
|
144
|
-
|
145
|
-
This task will make the release group-writable (if the :group_writable \
|
146
|
-
variable is set to true, which is the default). It will then set up \
|
147
|
-
symlinks to the shared directory for the log, system, and tmp/pids \
|
148
|
-
directories, and will lastly touch all assets in public/images, \
|
149
|
-
public/stylesheets, and public/javascripts so that the times are \
|
150
|
-
consistent (so that asset timestamping works). This touch process \
|
151
|
-
is only carried out if the :normalize_asset_timestamps variable is \
|
152
|
-
set to true, which is the default.
|
146
|
+
[internal] This task will make the release group-writable (if the :group_writable \
|
147
|
+
variable is set to true, which is the default).
|
153
148
|
DESC
|
154
149
|
task :finalize_update, :except => { :no_release => true } do
|
155
150
|
run "chmod -R g+w #{latest_release}" if fetch(:group_writable, true)
|
@@ -158,12 +153,12 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
158
153
|
desc <<-DESC
|
159
154
|
Updates the symlinks to the most recently deployed version. Capistrano works \
|
160
155
|
by putting each new release of your application in its own directory. When \
|
161
|
-
you deploy a new version, this task's job is to update the `current
|
162
|
-
`current/tmp
|
156
|
+
you deploy a new version, this task's job is to update the `current`, \
|
157
|
+
`current/tmp`, `current/webroot/system` symlinks to point at the new version. \
|
163
158
|
|
164
|
-
You will rarely need to call this task directly; instead, use the `deploy
|
165
|
-
task (which performs a complete deploy, including `restart
|
166
|
-
task (which does everything except `restart
|
159
|
+
You will rarely need to call this task directly; instead, use the `deploy` \
|
160
|
+
task (which performs a complete deploy, including `restart`) or the 'update` \
|
161
|
+
task (which does everything except `restart`).
|
167
162
|
DESC
|
168
163
|
task :symlink, :except => { :no_release => true } do
|
169
164
|
on_rollback do
|
@@ -175,6 +170,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
175
170
|
end
|
176
171
|
run "ln -s #{shared_path}/system #{latest_release}/webroot/system && ln -s #{shared_path}/tmp #{latest_release}/tmp";
|
177
172
|
run "rm -f #{current_path} && ln -s #{latest_release} #{current_path}"
|
173
|
+
cake.database.symlink if (remote_file_exists?(database_path))
|
178
174
|
end
|
179
175
|
|
180
176
|
desc <<-DESC
|
@@ -226,7 +222,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
226
222
|
end
|
227
223
|
|
228
224
|
desc <<-DESC
|
229
|
-
Rolls back to the previously deployed version. The `current
|
225
|
+
Rolls back to the previously deployed version. The `current` symlink will \
|
230
226
|
be updated to point at the previously deployed version, and then the \
|
231
227
|
current release will be removed from the servers.
|
232
228
|
DESC
|
@@ -237,7 +233,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
237
233
|
|
238
234
|
desc <<-DESC
|
239
235
|
Rolls back to a previous version and restarts. This is handy if you ever \
|
240
|
-
discover that you've deployed a lemon; `cap rollback
|
236
|
+
discover that you've deployed a lemon; `cap rollback` and you're right \
|
241
237
|
back where you were, on the previously deployed version.
|
242
238
|
DESC
|
243
239
|
task :default do
|
@@ -271,7 +267,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
271
267
|
Test deployment dependencies. Checks things like directory permissions, \
|
272
268
|
necessary utilities, and so forth, reporting on the things that appear to \
|
273
269
|
be incorrect or missing. This is good for making sure a deploy has a \
|
274
|
-
chance of working before you actually run `cap deploy
|
270
|
+
chance of working before you actually run `cap deploy`.
|
275
271
|
|
276
272
|
You can define your own dependencies, as well, using the `depend' method:
|
277
273
|
|
@@ -307,7 +303,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
307
303
|
end
|
308
304
|
|
309
305
|
desc <<-DESC
|
310
|
-
Deploys and starts a `cold
|
306
|
+
Deploys and starts a `cold` application. This is useful if you have never \
|
311
307
|
deployed your application before. It currently runs `deploy:setup` followed \
|
312
308
|
by `deploy:update`. \
|
313
309
|
(This is still an experimental feature, and is subject to change without \
|
@@ -320,7 +316,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
320
316
|
|
321
317
|
namespace :pending do
|
322
318
|
desc <<-DESC
|
323
|
-
Displays the `diff
|
319
|
+
Displays the `diff` since your last deploy. This is useful if you want \
|
324
320
|
to examine what changes are about to be deployed. Note that this might \
|
325
321
|
not be supported on all SCM's.
|
326
322
|
DESC
|
@@ -416,7 +412,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
416
412
|
Prepares server for deployment of a CakePHP application. \
|
417
413
|
|
418
414
|
By default, it will create a shallow clone of the CakePHP repository \
|
419
|
-
inside #{shared_path}/cakephp and run deploy:cake:update
|
415
|
+
inside #{shared_path}/cakephp and run `deploy:cake:update`.
|
420
416
|
|
421
417
|
For more info about shallow clones: \
|
422
418
|
http://www.kernel.org/pub/software/scm/git/docs/git-clone.html \
|
@@ -444,6 +440,17 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
444
440
|
task :update do
|
445
441
|
set :cake_branch, ENV['BRANCH'] if ENV.has_key?('BRANCH')
|
446
442
|
stream "cd #{cake_path}/cakephp && git checkout #{git_flag_quiet}#{cake_branch}"
|
443
|
+
if cake2
|
444
|
+
run "#{try_sudo} ln -s #{shared_path}/cakephp/lib/Cake #{deploy_to}/#{version_dir}/Cake"
|
445
|
+
else
|
446
|
+
run "#{try_sudo} ln -s #{shared_path}/cakephp/cake #{deploy_to}/#{version_dir}/cake"
|
447
|
+
end
|
448
|
+
run "#{try_sudo} mkdir -m 777 -p #{shared_path}/cakephp/media/transfer/img"
|
449
|
+
run "#{try_sudo} mkdir -m 777 -p #{shared_path}/cakephp/media/static/img"
|
450
|
+
run "#{try_sudo} mkdir -m 777 -p #{shared_path}/cakephp/media/filter"
|
451
|
+
run "#{try_sudo} ln -s #{shared_path}/cakephp/media #{deploy_to}/#{version_dir}/media"
|
452
|
+
run "#{try_sudo} ln -s #{shared_path}/cakephp/plugins #{deploy_to}/#{version_dir}/plugins"
|
453
|
+
run "#{try_sudo} ln -s #{shared_path}/cakephp/vendors #{deploy_to}/#{version_dir}/vendors"
|
447
454
|
end
|
448
455
|
|
449
456
|
namespace :cache do
|
@@ -454,8 +461,8 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
454
461
|
is renamed/removed after it was found but before it removes it, no error \
|
455
462
|
will prompt (-ignore_readdir_race). If symlinks are found, they will not be followed
|
456
463
|
|
457
|
-
You will rarely need to call this task directly; instead, use the `deploy
|
458
|
-
task (which performs a complete deploy, including `cake:cache:clear
|
464
|
+
You will rarely need to call this task directly; instead, use the `deploy` \
|
465
|
+
task (which performs a complete deploy, including `cake:cache:clear`)
|
459
466
|
DESC
|
460
467
|
task :clear, :roles => :web, :except => { :no_release => true } do
|
461
468
|
run "#{try_sudo} find -P #{cache_path} -ignore_readdir_race -type f -name '*' -exec rm -f {} \\;"
|
@@ -524,7 +531,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
524
531
|
#{deploy_to}/shared/config/database.php
|
525
532
|
DESC
|
526
533
|
task :symlink, :roles => :web, :except => { :no_release => true } do
|
527
|
-
run "#{try_sudo} ln -s #{database_path} #{current_path}
|
534
|
+
run "#{try_sudo} rm -f #{current_path}/#{database_partial_path} && #{try_sudo} ln -s #{database_path} #{current_path}/#{database_partial_path}"
|
528
535
|
end
|
529
536
|
end
|
530
537
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'capcake'
|
3
|
+
|
4
|
+
set :application, "your_app_name" # Your application name
|
5
|
+
|
6
|
+
set :scm, :git
|
7
|
+
set :repository, "git@domain.com:path/to/repo" # Your repository url
|
8
|
+
set :scm_username, "username" # Your username to log into your repository
|
9
|
+
set :scm_passphrase, Capistrano::CLI.password_prompt("Type your ssh passphrase for user #{scm_username}: ")
|
10
|
+
set :branch, "master"
|
11
|
+
set :use_sudo, false
|
12
|
+
|
13
|
+
set :deploy_via, :remote_cache
|
14
|
+
set(:group_writable, false)
|
15
|
+
|
16
|
+
###
|
17
|
+
# Staging
|
18
|
+
###
|
19
|
+
|
20
|
+
task :staging do
|
21
|
+
set :deploy_to, "/var/www/application/staging" # Your staging root path
|
22
|
+
set :user, "user" # Your staging user
|
23
|
+
set :group, "www-data" # Your staging group
|
24
|
+
server "staging.example.com", :web # Your staging server url
|
25
|
+
end
|
26
|
+
|
27
|
+
###
|
28
|
+
# Production
|
29
|
+
###
|
30
|
+
|
31
|
+
task :production do
|
32
|
+
set :deploy_to, "/var/www/application/production" # Your production root path
|
33
|
+
set :user, "user" # Your production user
|
34
|
+
set :group, "www-data" # Your production group
|
35
|
+
server "example.com", :web # Your production server url
|
36
|
+
end
|
37
|
+
|
38
|
+
ssh_options[:forward_agent] = true
|
39
|
+
|
40
|
+
set :cake_branch, " "
|
41
|
+
|
42
|
+
capcake
|
43
|
+
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capcake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 2
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 2.0.1
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Jad Bitar
|
@@ -9,19 +14,22 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2012-01-28 00:00:00 +02:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: capistrano
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 2
|
29
|
+
- 5
|
23
30
|
version: "2.5"
|
24
|
-
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
25
33
|
description: Deploy CakePHP applications using Capistrano
|
26
34
|
email: jadbitar@mac.com
|
27
35
|
executables: []
|
@@ -32,10 +40,10 @@ extra_rdoc_files:
|
|
32
40
|
- LICENSE
|
33
41
|
- README.markdown
|
34
42
|
files:
|
35
|
-
- lib/TODO
|
36
43
|
- lib/capcake.rb
|
37
44
|
- lib/templates/create_database.rsql
|
38
45
|
- lib/templates/database.rphp
|
46
|
+
- lib/templates/deploy.rb.default
|
39
47
|
- lib/templates/maintenance.rhtml
|
40
48
|
- LICENSE
|
41
49
|
- README.markdown
|
@@ -44,26 +52,28 @@ homepage: http://github.com/jadb/capcake
|
|
44
52
|
licenses: []
|
45
53
|
|
46
54
|
post_install_message:
|
47
|
-
rdoc_options:
|
48
|
-
|
55
|
+
rdoc_options: []
|
56
|
+
|
49
57
|
require_paths:
|
50
58
|
- lib
|
51
59
|
required_ruby_version: !ruby/object:Gem::Requirement
|
52
60
|
requirements:
|
53
61
|
- - ">="
|
54
62
|
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
55
65
|
version: "0"
|
56
|
-
version:
|
57
66
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
67
|
requirements:
|
59
68
|
- - ">="
|
60
69
|
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 0
|
61
72
|
version: "0"
|
62
|
-
version:
|
63
73
|
requirements: []
|
64
74
|
|
65
75
|
rubyforge_project:
|
66
|
-
rubygems_version: 1.3.
|
76
|
+
rubygems_version: 1.3.6
|
67
77
|
signing_key:
|
68
78
|
specification_version: 3
|
69
79
|
summary: Deploy CakePHP applications using Capistrano
|
data/lib/TODO
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
* create cake:logs:tail to find every file modified in the last N hours and then tail them all
|
2
|
-
* update deploy:check to check if shared/system/database.php is created or not - force creation if :db is set
|
3
|
-
* override deploy:migrate and deploy:migrations to use cake schema shell commands
|
4
|
-
* test what's simpler for people in general:
|
5
|
-
- using multistage extension for Capistrano
|
6
|
-
- creating deploy:production, deploy:staging tasks to reset variables' values
|
7
|
-
* refactor code so it looks more like Ruby stuff (ie: Capitate)
|