1.数组遍历方法总结
1 | array = (1..10).to_a |
1 | length = array.length |
1 | length = array.length-1 |
1 | for i in array do |
1 | array.each{x print x," "} |
1 | length = array.length |
1 | length = array.length |
1 | array.each_index do i |
2.Ruby连接数据库
- mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23require 'mysql'
begin
db = Mysql.init
db.options(Mysql::SET_CHARSET_NAME, 'utf8')
db = Mysql.real_connect("127.0.0.1", "root", "123456", "test", 3306)
db.query("SET NAMES utf8")
db.query("drop table if exists tb_test")
db.query("create table tb_test (id int,
text LONGTEXT) ENGINE=MyISAM DEFAULT CHARSET=utf8")
db.query("insert into tb_test (id, text) values (
1,'first line'),(2,'second line')")
printf "%d rows were inserted\n",db.affected_rows
rslt = db.query("select text from tb_test")
while row = rslt.fetch_row do
puts row[0]
end
rescue Mysql::Error => e
puts "Error code: #{e.errno}"
puts "Error message: #{e.error}"
puts "Error SQLSTATE: #{e.sqlstate}" if e.respond_to?("sqlstate")
ensure
db.close if db
end - redis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#!/bin/ruby
require 'redis'
def writeToFile(file,content)
fp = File.new(file,"a+")
if fp
fp.syswrite(content)
else
puts "..."
end
end
def connect(host)
redis = Redis.new(:host => host,:port => 6379)
redis.info.keys.each do |key|
puts "#{key}:\t"+redis.info["#{key}"]
end
end
connect("1.1.1.1") - sqlite3
1
2
3
4
5
6
7
8
9
10
11
12require 'sqlite3'
db = SQLite3::Database.new('test.db')
db.execute("create table test(
ID integet not null,
Username varchar(20) null,
Password varchar(64) null)")
db.execute("insert into test(ID.Username,Password)
values('0','admin','admin')")
db.execute("select * from test")
db.execute("update test set password='12345' where id=0")
3.Ruby socket
服务端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18require 'socket'
server = TCPServer.open('0.0.0.0', 8080)
loop do
Thread.start(server.accept) do |client|
begin
while true
puts "#{client.to_i} online"
data = client.read()
throw "empty" if data.empty?
#puts data.length
puts data
end
rescue Exception => e
puts "#{client.to_i} offline"
end
end
end客户端:
1
2
3
4
5
6
7
8
9require 'socket'
hostname = '127.0.0.1'
port = 8080
buf = 'test'
s = TCPSocket.open(hostname, port)
s.write buf
sleep(1)
s.close
4.ruby gem 文档服务
rubygems.org上的gem文档访问起来太慢了,其实gem本身就自带doc的功能
安装gem的时候会默认安装相应gem的doc,如果不想占用空间安装doc,则gem install XXX –no-doc 即可。
使用下列命令可以启动gem自带的文档:
1 | gem server --port 1234 |
然后访问http://localhost:1234
就可以查看相关的gem文档。
5.ruby改变控制台输出内容的颜色
1 | puts "\033[1m前景色\033[0m\n" |
6.一些比较特别的包
Ruby json gem
https://rubygems.global.ssl.fastly.net/gems/json-1.8.3.gem
树莓派wiringpi gpio包
http://pi.gadgetoid.com/article/wiringpi-as-a-ruby-gem
7.安装rvm的正确姿势
参考自:http://rvm.io/rvm/install
首先添加gpg公钥:
1 | gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 |
安装稳定版本的rvm
1 | curl -sSL https://get.rvm.io | bash -s stable --ruby |
8.解决kali2.0中RVM不能编译ruby-2.3.3
- 错误详情:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19ruby-2.3.3 - #compiling.......................................................................-
Error running '__rvm_make -j4',
showing last 15 lines of /usr/local/rvm/log/1488041042_ruby-2.3.3/make.log
exts.mk:210: recipe for target 'ext/openssl/all' failed
make[1]: *** [ext/openssl/all] Error 2
make[1]: *** Waiting for unfinished jobs....
installing default nkf libraries
compiling objspace_dump.c
linking shared-object json/ext/generator.so
make[2]: Leaving directory '/usr/local/rvm/src/ruby-2.3.3/ext/json/generator'
linking shared-object objspace.so
make[2]: Leaving directory '/usr/local/rvm/src/ruby-2.3.3/ext/objspace'
linking shared-object nkf.so
make[2]: Leaving directory '/usr/local/rvm/src/ruby-2.3.3/ext/nkf'
make[1]: Leaving directory '/usr/local/rvm/src/ruby-2.3.3'
uncommon.mk:203: recipe for target 'build-ext' failed
make: *** [build-ext] Error 2
++ return 2
There has been an error while running make. Halting the installation.
查看/usr/local/rvm/log/1488041042_ruby-2.3.3/make.log发现是openssl版本过老导致的。
- 解决:
第一步:先安装用于rvm的openssl:1
rvm pkg install openssl
第二步:编译安装ruby,指定openssl目录(我的是/usr/local/rvm/usr/)
1 | rvm install ruby-2.3.3 --with-openssl-dir=/usr/local/rvm/usr/ |
9.设置Gems默认源为ruby-china
现在没有淘宝源了,只有ruby-china源
1 | gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/ |
设置Bundler默认源为ruby-china:
1 | bundle config mirror.https://rubygems.org https://gems.ruby-china.org |
这样修改以后,即使Gemfile中指定了Source,也会用国内的源。