OK, now I am stuck in something interesting...
My logic to achieve the above said requirement is as follows:
You call "cap -S config=blah -S svn-repo=both my_deploy"
The code in deploy.rb is as such:
task :my_deploy do
init_server_list { deploy.default }
end
def init_server_list(&given_task)
# if svn repo name is given, get ip from there.
if variables.include?(:svn_repo) and svn_repo == "both"
# get all repo names, call deployer for every unique name.
con = Mysql.new(db_host, db_user, db_pass, db_schema)
rs = con.query("SELECT DISTINCT _nick_name FROM repo;")
rs.each do |row|
set :repo_name, row[0]
get_server_list given_task
end
con.close
end
end
def get_server_list(action)
con = Mysql.new(db_host, db_user, db_pass, db_schema)
query = "select
server.`_ip` as ip,
repo.`_svn_url` as repo_url
from
server
left join repo
on repo.`_id` = server.`_repo_id`
where repo.`_nick_name` = '#{repo_name}'";
rs = con.query(query)
roles[:app].clear
rs.each do |row|
role :app, row[0]
set :repository, row[1]
end
con.close
action.call
end
# Unnecessary code removed and/or obfuscated, but assure that no harm done
to hinder debugging.
Now the logic is that it should loop through for every repository, get the
list of servers to be updated for that repository and update the code.
All is well, it runs smoothly for every server and all... But...
When it comes to updating the svn repo, it is pushing the same repo that it
got first time.
It seemed that the "svn checkout" command is cached somewhere...
Further debugging, I went into "strategy/checkout.rb" inside capistrano's
code.
def command
@command || = source.checkout(revision, configuration[:release_path])
end
Remove the '||' there, it works well... I wouldn't like to touch original
capistrano code unless absolutely necessary. So, is there a way to unset
the command variable from my recipe or any better way?
Any suggestions towards the architecture or a solution would be welcome...
On Tuesday, June 12, 2012 2:20:46 PM UTC+5:30, shrinath_m2 wrote:
>
>
>
> On Tue, Jun 12, 2012 at 10:47 AM, Donovan Bray <[email protected]> wrote:
>
>> with a clean ruby process.
>
> That exactly is my problem - I am passing few custom variables - like "cap
> -S config=myconf -S svn_repo=staging -S restart_bin=httpserver task_a"
> Now, if I do as you say, I'll have to pass them all over again, which will
> re-initiate the whole bootstrapping... Bad, isn't it? That requires lot
> more re-structuring...
>
> BTW, what might not work with the accepted approach - deploy.default?
>
>
>
> --
> *Regards*
> *Shrinath M*
>
>
--
* 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