Ruby
от ILuxWiki
Съдържание |
RVM - що е то?
Ruby Version Manager - позволява ползването на различни версии на ruby. Реших да го ползвам за да изтествам как се справя ruby 1.9.2 с един проект писан на Rails 3.0.10 и ruby 1.8.7. От сондиране на мненията в интернет установих че е добре да се ползва 1.9.2 за production. Това е и причината да инсталирам тази версия в работната си машина. RVM ще ми помогне да си запазя основната версия на ruby(1.8.7) и временно да премина към 1.9.2.
- Инсталация на RVM
bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
- Инсталация на ruby 1.9.2 с rvm
rvm install 1.9.2 -C --enable-shared,--with-readline-dir=/usr/local
- Преминаване към 1.9.2
rvm 1.9.2 --default
- Използване на system ruby версията
rvm system
- какво се ползва в момента
rvm use
Всичко трябва да се проверява
† ~> ruby -v ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin10] † ~> rvm 1.9.2 --default † ~> ruby -v ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0]
Фрагменти
Работа със времеви стойности
- unixtime to Time
Time.at(1161200857)
- string to Time
require 'time'
Time.parse('2007-01-31 12:22:26')
UTF-8 чуднотеки
Това коментарче, трябва да се постави в началото на script-а, който ползва utf-8 символи:
# encoding: UTF-8
Скриптове
Twitter API
gem install twitter
#!/usr/bin/env ruby
require 'rubygems'
require 'twitter'
httpauth = Twitter::HTTPAuth.new('username', 'password')
base = Twitter::Base.new(httpauth)
base.update('Heeeeyyyyooo from the Twitter Gem')
използване на Net::SSH
gem install echoe gem install net-ssh
#!/usr/bin/env ruby
require 'rubygems'
require 'net/ssh'
HOST = '192.168.1.1'
USER = 'username'
PASS = 'password'
Net::SSH.start( HOST, USER, :password => PASS ) do|ssh|
result = ssh.exec!('ls')
puts result
end
Генериране на таблица за Wiki
#!/usr/bin/env ruby
CENTER = 32
def header(titles)
b_row = '!'
e_row = "\n|-"
b_row + (titles.map{ |e| e.center(CENTER)}).join('||') + e_row
end
def lines(net, f, t)
b_row = "|"
e_row = "\n|-"
out = []
f.upto(t) { |e|
ip = net + e.to_s
cmd = "host %s" % [ ip ]
hostname = `#{cmd}`.split(/ /)[4].chomp.chop!
row = [ "[[#{hostname}]]", "#{ip}", "", "[http://incubus.interbild.net/munin/interbild.net/#{hostname}.html munin]" ]
out << b_row + (row.map{ |e| e.center(CENTER)}).join('||') + e_row
}
out
end
##
## main
##
net = '94.190.192.'
table_start = '{| border="1" class="prettytable, sortable"'
table_end = '|}'
titles = [ 'Име', 'IP', 'Предназначение', 'Връзки' ]
puts table_start
puts header(titles)
puts lines(net, 1, 63)
puts table_end
Генериране на DHCP списък за staff hardware
#!/usr/bin/env ruby
data =<<__EOF__
17. notebook CPU: Core Duo 1.83 GHz, RAM: 1024 MB, HDD: 160GB 00:1B:24:F1:70:FD 00:17:C4:15:97:BD Windows XP SP3 AVG Търговски офис Нина Жекова BENQ S32B
18. notebook CPU: Core Duo 1.86 GHz, RAM: 2048 MB, HDD: 250GB 00:15:AF:D1:2A:34 Windows XP SP3 NOD32 3.0 Търговски офис Нина Андреева
__EOF__
data = data.split(/\n/)
users = Array.new
i = 10
data.each { |e|
l = e.split(/\t/)
users << {:name => l[7].strip, :mac => l[4].strip, :ip => "10.210.1.#{i}"}
i += 1
# .each { |l|
# i += 1;
# puts "#{i} - #{l}"
# users << {:name => l}
# }
}
require 'pp'
users.each { |e|
# puts e.keys
data = <<__EOF__
host #{e[:name].strip.gsub(/\s+/,'_')} {
hardware ethernet #{e[:mac]};
option host-name "#{e[:name]}";
fixed-address #{e[:ip]};
}
__EOF__
puts data
}

