Hey~

On Jan 22, 2007, at 8:20 AM, Wayne E. Seguin wrote:

>
> Ezra,
>
> I think this is a great idea and will prove very useful, I would
> definitely use it.
>
> I especially like your great use of method_missing.
>
> I do however forsee a problem with the current idea regarding calls
> like ln_nfs for ln -nfs.
>
> The issue I see here is with commands like:
>   mongrel_rails
>   mongrel_cluster
>   mysqld_safe
>   mysql_*
>   etc...
>
> As for how to fix this nicely... I'm not sure yet but I see three
> possibilities:
> 1. Use two underscores
> 2. Grab the last part of the underscore
> 3. Use ! at the end to indicate that parameters are intended
>
> Problem with 1 is, well, it's ugly! It is however functional and it
> would be clear what was meant by it
> Problem with 2 is better except for if you call a command with no
> arguments
> Not sure there is much of an issue with 3 unless you intend on using !
> in other places
>
> I'll be monitoring this thread, I'd love to help out here.
>
> Thanks for the great work!
>
>   ~Wayne


        So I have worked on this some more to incorporate being abel to set  
ENV vars per line if you want.

sh.RAILS_ENV('production').mkdir_p 'foo/bar'

#=> RAILS_ENV=production mkdir -p foo/bar

        Also I made the method_missing dispatch work if you called   
sh.mongrel_cluster_C "config/mongrel.conf"  It will now take only the  
last text after an underscore and convert that into -args.

        But this still doesn't account for calling  sh.mongrel_cluster  
"start" . the method missing will trigger and split that into mongrel  
-cluster start, which is obviously not what we want. Here is a hack I  
am using right now to get around this:

   %w[
     mongrel_rails
     mongrel_cluster
     mysqld_safe
   ].each do |m|
     define_method(m) do |*args|
       @cmdbuff << "[EMAIL PROTECTED] #{args.join(' ')}\n"
       self
     end
   end

        I use define_method and a list of known commands with underscores  
that should not be picked apart my method missing any more. This gets  
around the problem at the expense of the need to compile a big list  
of commands that we need to put in that list. If anyone has any other  
ideas to handle this case I am all ears.

        Jamis asked me to get the update_code task to work with this. Here  
you can see a comparison between the old way and the new way:

http://pastie.caboo.se/34983


        ALso I have made this into a capistrano plugin that you can use  
right now and it already will upload your script to a tmpdir on the  
server chmod +x it and then run it and then delete it. I am attaching  
the new gem here if you want to try it.

        Install the gem and then in your recipe do this:

require 'rubygems'
require 'shell_script_builder/cap_plugin'



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

Attachment: shell-script-builder-1.0.1.gem
Description: Binary data


Cheers-

-- Ezra Zygmuntowicz 
-- Lead Rails Evangelist
-- [EMAIL PROTECTED]
-- Engine Yard, Serious Rails Hosting
-- (866) 518-YARD (9273)


Reply via email to