Here ya go Ezra, good stuff.
documented it a tad and provided an example with the new options hash.
--
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 1/9/07, Ezra Zygmuntowicz <[EMAIL PROTECTED]> wrote:
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
>> [email protected]
>> http://rubyforge.org/mailman/listinfo/mongrel-users
>>
> _______________________________________________
> Mongrel-users mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/mongrel-users
>
-- Ezra Zygmuntowicz
-- Lead Rails Evangelist
-- [EMAIL PROTECTED]
-- Engine Yard, Serious Rails Hosting
-- (866) 518-YARD (9273)
--~--~---------~--~----~------------~-------~--~----~
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/capistrano
-~----------~----~----~----~------~----~------~--~---
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.
# Use the +options+ has to specify:
# +version+
# +source+
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(' ')}"
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+).
# Use the +options+ hash to specify:
# +version+
# +source+
# +platform+
# +extra_params+
# For example:
# gem.select 'mongrel' , :source => 'http://mongrel.rubyforge.org/releases'
# gem.install 'mongrel', :source => 'http://mongrel.rubyforge.org/releases',
# :version => '1.0'
# gem.select 'mysql', :version => '2.7',
# :platform => 'ruby',
# :extra_params => '-- --with-mysql-config'
def select(package, options={})
selections={}
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}"
sudo cmd do |channel, stream, data|
data.each_line do | line |
case line
when /\s(\d+).*\(#{options[: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
_______________________________________________
Mongrel-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/mongrel-users