Thanks so much for the quick response. Unfortunately, magical is exactly what I need, so it looks like I'll be using 'invoke_task_directly_without_callbacks'. I tested it, and it seems to work exactly the way I need. Am I going to break anything by not having the task added to the task call frame? I'm not sure of its function, and noticed that execute_task adds that around invoke_task_directly.
Thanks for the help, Emily On May 12, 10:19 am, Jamis Buck <[email protected]> wrote: > Looks like the documentation is ambiguous. What it means is, that > particular version of the method doesn't invoke the callbacks. However, > Capistrano also loads the "Callbacks" module (capistrano/callbacks.rb), > which overrides the invoke_task_directly method to decorate it with the > callback calls. > > So, you have two options. > > First, you can call the task via > "invoke_task_directly_without_callbacks" (which is what the original > method is aliased to when the callbacks are added). > > Second (and this option is cleaner, I think, but only works when you > have control over the tasks being invoked): write the target task as a > vanilla Ruby method, first, and then have the tasks call the method. E.g. > > def do_foo > puts "foo!" > end > > task :say_foo_without_bar do > do_foo > end > > task :say_foo do > do_foo > end > > task :say_bar do > puts "bar!" > end > > after :say_foo, :say_bar > > It takes a little more planning, but it's less magical, and less > dependent on internal Capistrano methods. > > - Jamis > > On 5/12/09 8:02 AM, Emily wrote: > > > > > I'm working on a complex Capistrano recipe that requires being able to > > run a task without callbacks. After some searching through source and > > rdocs, it seems that "execute_task" is the intended way to do this. > > The documentation states that it "executes the task with the given > > name, without invoking any associated callbacks." However, when I run > > a task with execute_task, its callbacks are executed. I also tried > > using invoke_task_directly, which is what execute_task calls > > internally, and that also runs callbacks. Am I misunderstanding the > > purpose of execute_task? Is there some other method I should be using? > > I'm including a minimal Capfile which demonstrates the problem I'm > > having along with the results I'm getting and the results I'm > > expecting. > > > I've spend a little bit of time trying to figure out what's happening > > with this in the ruby debugger, but with all the meta-programming > > going on in Capistrano, I had a hard time figuring out what's actually > > happening. So I thought that before I spend a whole day digging > > through the source code, I'd see if perhaps anyone else had > > experienced something similar or if I was misinterpreting what > > execute_task is supposed to do. > > > Thanks in advance for your help, > > - Emily > > > The capfile: > > task :say_foo_without_callback do > > t = top.find_task 'say_foo' > > execute_task t > > end > > > task :say_foo do > > puts 'foo!' > > end > > > task :say_bar do > > puts 'bar!' > > end > > > after :say_foo, :say_bar > > > Output from 'cap say_foo': > > * executing `say_foo' > > foo! > > triggering after callbacks for `say_foo' > > * executing `say_bar' > > bar! > > > Output from 'cap say_foo_without_callback': > > * executing `say_foo_without_callback' > > * executing `say_foo' > > foo! > > triggering after callbacks for `say_foo' > > * executing `say_bar' > > bar! > > > What I would expect from 'cap say_foo_without_callback': > > * executing `say_foo_without_callback' > > * executing `say_foo' > > foo! --~--~---------~--~----~------------~-------~--~----~ To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/capistrano -~----------~----~----~----~------~----~------~--~---
