Hey Charles- Cool I'm glad you like it. It definitely needed a cleanup of the params and your patch looks really nice. Unfortunately email ate the formatting and I can't use it :/ Can you send me a copy of the entire file in its new state? You can send it to me directly if you like. I really need to package this thing up with a few other goodies I have and release it.
Thanks- -Ezra On Jan 9, 2007, at 3:00 PM, Charles Brian Quinn wrote: > Ezra, I found this cap plugin you posted to be extremely useful, ccing > Capistrano list, where I know you've posted about it too. I have a > patch, adding the options as a params hash for readability. My > cursory googling..err..searching could not reveal where this > capistrano "Gem" plugin resides. > > main difference is this method: > > def install(packages, source=nil, version=nil) > > is now: > > def install(packages, options={}) > > so you can do: > > gem.select 'mysql', :version => '2.7', :platform => 'ruby', > :extra_params => '-- --with-mysql-config' > > or: > > gem.select 'mongrel', :version => '0.3.13.4' > > Here's the diff, (email formatting is horrible), or point me to an svn > for latest to build a patch > > $ diff cap_gem_plugin.rb cap_gem_plugin_cbq.rb > 39,41c36,40 > < def install(packages, source=nil, version=nil) > < sudo "#{GEM_INSTALL} #{version ? '-v '+version.to_s : nil} # > < {source ? '--source='+source : nil } #{packages.to_a.join(' ')}" > --- >> # def install(packages, source=nil, version=nil) >> def install(packages, options={}) >> sudo "#{GEM_INSTALL} #{options[:version] ? '-v '+options >> [:version].to_s : nil} " + >> "#{options[:source] ? '--source='+options[:source] : >> nil } " + >> "#{packages.to_a.join(' ')}" > 63c59,60 > < def select(package, source=nil, version=nil, platform='ruby') > --- >> # def select(package, source=nil, version=nil, platform='ruby') >> def select(package, options={}) > 65,66c62,65 > < cmd="#{GEM_INSTALL} #{version ? '-v '+version.to_s : nil} # > < {package} #{source ? '--source='+source : nil }" > --- >> cmd="#{GEM_INSTALL} #{options[:version] ? '-v '+options >> [:version].to_s : nil} " + >> "#{package} " + >> "#{options[:source] ? '--source='+options[:source] : nil } >> " + >> "#{options[:extra_params] ? options[:extra_params] : nil}" > 70c69 > < when /\s(\d+).*\(#{platform}\)/ > --- >> when /\s(\d+).*\(#{options[:platform]}\)/ > > > Thanks! > -- > Charles Brian Quinn > self-promotion: www.seebq.com > highgroove studios: www.highgroove.com > slingshot hosting: www.slingshothosting.com > 678.389.9462 > > Ruby on Rails Bootcamp at the Big Nerd Ranch > Intensive Ruby on Rails Training: > http://www.bignerdranch.com/classes/ruby.shtml > > On 12/21/06, Ezra Zygmuntowicz <[EMAIL PROTECTED]> wrote: >> On Dec 21, 2006, at 11:13 AM, Charles Brian Quinn wrote: >>> Thanks Steven, >>> >>> This is using Jamis' net/ssh library and using: >>> >>> sudo cmd do |channel, stream, data| >>> data.each_line do | line | >>> >>> to regex match lines and type in input. this could work, but i was >>> hoping for bash or something simpler.... >>> >>> Guess that means it's time to move my all of my shell scripts >>> over to >>> ruby (except for the one that installs ruby) ;-) >>> >>> Thanks! >> >> >> Charles- >> >> You and me both. I didn't want to spend the time writing bash >> scripts for this when I need to do it on tons of machines anyway. So >> the script he linked to is actually a capistrano plugin. Take the >> file and put it somewhere in your load path and then require it from >> a capistrano recipe file and then you can use it like this: >> >> >> require 'cap_gem' >> >> task :install_gems, :roles => :app do >> gem.select 'mongrel' , 'http://mongrel.rubyforge.org/releases' >> gem.install 'mongrel', 'http://mongrel.rubyforge.org/releases' , >> '1.0' >> end >> >> select will select the most recent versions for the current platform >> and install it. install will install a specific version but won't >> auto select from a menu. So is there are two or more versions of a >> gem then you want to use select. >> >> Here is the more current version of the plugin for cap. This one >> supports the --source option. >> >> require 'rubygems' >> require 'capistrano' >> # Installs within Capistrano as the plugin _gem_. >> # Prefix all calls to the library with <tt>gem.</tt> >> # Manages installing gems and versioned gems. >> module Gem >> >> # Default install command >> # >> # * doesn't install documentation >> # * installs all required dependencies automatically. >> # >> GEM_INSTALL="gem install -y --no-rdoc" >> >> # Upgrade the *gem* system to the latest version. Runs via *sudo* >> def update_system >> sudo "gem update --system" >> end >> >> # Updates all the installed gems to the latest version. Runs via >> *sudo*. >> # Don't use this command if any of the gems require a version >> selection. >> def upgrade >> sudo "gem update --no-rdoc" >> end >> >> # Removes old versions of gems from installation area. >> def cleanup >> sudo "gem cleanup" >> end >> >> # Installs the gems detailed in +packages+, selecting version >> +version+ if >> # specified. >> # >> # +packages+ can be a single string or an array of strings. >> # >> def install(packages, source=nil, version=nil) >> sudo "#{GEM_INSTALL} #{version ? '-v '+version.to_s : nil} # >> {source ? '--source='+source : nil } #{packages.to_a.join(' ')}" >> end >> >> def uninstall(package) >> sudo "gem uninstall #{package}" do |channel, stream, data| >> data.each_line do |line| >> if line =~ /\[Yn\]/ >> channel.send_data "Y\n" >> end >> end >> end >> end >> >> # Auto selects a gem from a list and installs it. >> # >> # *gem* has no mechanism on the command line of disambiguating >> builds for >> # different platforms, and instead asks the user. This method has >> the necessary >> # conversation to select the +version+ relevant to +platform+ (or >> the one nearest >> # the top of the list if you don't specify +version+). >> def select(package, source=nil, version=nil, platform='ruby') >> selections={} >> cmd="#{GEM_INSTALL} #{version ? '-v '+version.to_s : nil} # >> {package} #{source ? '--source='+source : nil }" >> sudo cmd do |channel, stream, data| >> data.each_line do | line | >> case line >> when /\s(\d+).*\(#{platform}\)/ >> if selections[channel[:host]].nil? >> selections[channel[:host]]=$1.dup+"\n" >> logger.info "Selecting #$&", "#{stream} :: #{channel >> [:host]}" >> end >> when /\s\d+\./ >> # Discard other selections from data stream >> when /^>/ >> channel.send_data selections[channel[:host]] >> logger.debug line, "#{stream} :: #{channel[:host]}" >> else >> logger.info line, "#{stream} :: #{channel[:host]}" >> end >> end >> end >> end >> >> end >> >> Capistrano.plugin :gem, Gem >> >> >> Cheers- >> -- Ezra Zygmuntowicz-- Lead Rails Evangelist >> -- [EMAIL PROTECTED] >> -- Engine Yard, Serious Rails Hosting >> -- (866) 518-YARD (9273) >> >> >> _______________________________________________ >> Mongrel-users mailing list >> Mongrel-users@rubyforge.org >> http://rubyforge.org/mailman/listinfo/mongrel-users >> > _______________________________________________ > Mongrel-users mailing list > Mongrel-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/mongrel-users > -- Ezra Zygmuntowicz -- Lead Rails Evangelist -- [EMAIL PROTECTED] -- Engine Yard, Serious Rails Hosting -- (866) 518-YARD (9273) _______________________________________________ Mongrel-users mailing list Mongrel-users@rubyforge.org http://rubyforge.org/mailman/listinfo/mongrel-users