On Nov 16, 2011, at 10:52 AM, Lee Hambley wrote:
> Based on what I saw he is not forking; he is creating a sub shell via a
> system() call; so there will be no sharing of anything from the run time
> parent cap.
>
> Acknowledged, bit of a shame, would be possible to set up the variables, fork
> and load the individual depoys, I expect… but honestly I've never had to try
> that.
----
OK - going at it from a different angle where I don't create a sub shell at all
and stay entirely in a single namespace...
task :dep_to_code do
set :deploy_to, "#{deploy_path}"
set :copy, "#{deploy_to}/shared/cached-copy"
strategy.deploy!
run "rm -f #{current_path} && ln -s #{latest_release} #{current_path}"
end
task :dep_to_i18n do
_cset(:deploy_to, lambda { "#{deploy_path}/i18n" } )
set :copy, "#{deploy_to}/shared/cached-copy"
_cset :version_dir, "releases"
_cset :shared_dir, "shared"
_cset :shared_children, %w(system log pids)
_cset :current_dir, "current"
_cset(:releases_path) { File.join(deploy_to, version_dir) }
_cset(:shared_path) { File.join(deploy_to, shared_dir) }
_cset(:current_path) { File.join(deploy_to, current_dir) }
_cset(:release_path) { File.join(releases_path, release_name) }
_cset(:releases) { capture("ls -x #{releases_path}", :except => {
:no_release => true }).split.sort }
_cset(:current_release) { releases.length > 0 ? File.join(releases_path,
releases.last) : nil }
_cset(:previous_release) { releases.length > 1 ? File.join(releases_path,
releases[-2]) : nil }
_cset(:current_revision) { capture("cat #{current_path}/REVISION",
:except => { :no_release => true }).chomp }
_cset(:latest_revision) { capture("cat #{current_release}/REVISION",
:except => { :no_release => true }).chomp }
_cset(:previous_revision) { capture("cat #{previous_release}/REVISION",
:except => { :no_release => true }).chomp
if previous_release }
strategy.deploy!
run "rm -f #{current_path} && ln -s #{latest_release} #{current_path}"
end
end
before "deploy:cold", "deploy:setup", "deploy:code", "deploy:i18n"
after "deploy:code", "deploy:code_tag", "deploy:dep_to_code",
"deploy:bundleit", "deploy:finalize_update", "deploy:relink"
after "deploy:i18n", "deploy:i18n_tag", "deploy:dep_to_i18n", "deploy:relink"
So - now, if I completely remove the deployment directory and...
cap test2 deploy:cold
deploy:setup creates the structure as intended
deploy:code loads the 'deploy:tag' code, executes the subversion checkout and
relinks, etc.
but
deploy deploy:dep_to_i18n tries to 'strategy.deploy!' back to the same
RAILS_ROOT/shared/cached-copy directory and not in
RAILS_ROOT/i18n/shared/cached-copy and as you can see, I am going to great
lengths to override this in the dep_to_i18n task (which works properly if I
execute it separately but fails consistently if I perform any type of code
update/checkout to the 'code' base prior as if the ':copy' variable is
absolutely immutable from a single execution once it has been set.
Craig
--
* You received this message because you are subscribed to the Google Groups
"Capistrano" group.
* To post to this group, send email to [email protected]
* To unsubscribe from this group, send email to
[email protected] For more options, visit this group at
http://groups.google.com/group/capistrano?hl=en