Stupid question: Are patches preferred against the gem, or the svn?

On 1/15/08, Jamis Buck <[EMAIL PROTECTED]> wrote:
>
> David,
>
> Interesting suggestion. I would definitely consider adding something
> like that to cap. If anyone were to write up a patch and attach it to
> a ticket at dev.rubyonrails.org, I'd look it over.
>
> In the meantime, you can probably work around it by using the :hosts
> key, instead of roles, and then using procs to return the exact hosts
> you want. It's more work, and it would probably wind up duplicating
> some of what roles give you, but then you don't have to wait for a
> patch. :)
>
> - Jamis
>
> On Jan 11, 2008, at 3:23 PM, David Masover wrote:
>
> > Thanks, I didn't know about that.
> >
> > However...  I'm looking for something more like this:
> >
> > role :foo, do
> > ...
> > end
> > task :bar, :roles => :foo
> > ...
> > end
> >
> > That's actually what I implemented in what I sent in, because I
> > couldn't find it. Can "defer" work in a similar way? Because it also
> > allows:
> >
> > task :baz, roles => :foo
> > ...
> > end
> > task :yetAnotherTask, roles => :foo
> > ...
> > end
> > task :mixAndMatch, roles => :foo, :bar
> > ...
> > end
> >
> > Basically, it's not that I don't know which roles I want ahead of
> > time. It's that I have a role that I do know about, very
> > specifically (could be :web, :files, etc), but that I don't
> > necessarily know which servers it will use.
> >
> > On 1/11/08, Jamis Buck <[EMAIL PROTECTED]> wrote: David,
> >
> > Perhaps I'm not understanding what you're mean, but the current
> > version of Capistrano allows you to do things like this:
> >
> >    task :foo, :roles => defer { something_that_computes_roles } do
> >    end
> >
> > The "defer" method is just an alias for lambda that Capistrano adds.
> > The block there just needs to return the name of a role (or an array
> > of role names). That block is then evaluated at the moment that the
> > task is run.
> >
> > - Jamis
> >
> > On Jan 11, 2008, at 1:29 PM, David Masover wrote:
> >
> > >
> > > Working on a way to use Capistrano to deploy to ec2. I know about
> > > Capsize, but decided that I didn't want to hardcode image and
> > instance
> > > IDs anywhere -- particularly as Capistrano itself will eventually be
> > > creating those itself.
> > >
> > > The first roadblock was: I can use variables-as-blocks to define
> > > things like the list of current instances, the latest instance, etc.
> > > (Variables, not functions or tasks, because I figure that
> > information
> > > isn't going to change over the course of a single invocation of cap,
> > > unless I change it myself.)
> > >
> > > But I cannot define roles-as-blocks, and I want to find roles out
> > from
> > > the results of ec2-describe-instances (and probably other things as
> > > well). So, I needed dynamic roles.
> > >
> > > I'm completely new to the Rails and Capistrano community, so I'm not
> > > sure what style conventions I should use, where to send patches,
> > etc.
> > > Here's the hack I have so far:
> > >
> > > Capistrano::Configuration::Roles.module_eval do
> > >       alias_method :orig_role, :role
> > >       def role(which, *args, &block)
> > >               if !block_given? && args.empty? || block_given? && !
> > args.empty?
> > >                       raise ArgumentError, "you must specify
> > exactly one of either a
> > > value or a block"
> > >               end
> > >               if block_given? then
> > >                       which = which.to_sym
> > >                       @roles[which] = block
> > >               else
> > >                       # I apologize for this one-liner
> > >                       orig_role(which, args.map{|item| String ===
> > item ?
> > > Capistrano::ServerDefinition.new(item) : item})
> > >               end
> > >       end
> > > end
> > >
> > > Capistrano::Configuration::Servers.module_eval do
> > >       alias_method :find_servers_orig, :find_servers
> > >       def find_servers(options={})
> > >               hosts = server_list_from(ENV['HOSTS'] ||
> > options[:hosts])
> > >
> > >               if hosts.any?
> > >                       hosts.uniq
> > >               else
> > >                       roles = role_list_from(ENV['ROLES'] ||
> > options[:roles] ||
> > > self.roles.keys)
> > >                       roles.each { |role|
> > >                               target = self.roles [role]
> > >                               if target.respond_to?(:call)
> > >                                       self.roles[role] =
> > target.call.map { |server|
> > >                                               String === server ?
> > ServerDefinition.new(server, {}) : server
> > >                                       }
> > >                               end
> > >                       }
> > >                       find_servers_orig(options)
> > >               end
> > >       end
> > > end
> > >
> > >
> >
> >
> >
> >
> > > >
>
>
>

--~--~---------~--~----~------------~-------~--~----~
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/capistrano
-~----------~----~----~----~------~----~------~--~---

Reply via email to