Ruby 安装与开发
Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻组)。因为Perl发音与6月诞生石pearl(珍珠)相同,因此Ruby以7月诞生石ruby(红宝石)命名。
Ruby 的发明者是日本的松本行弘 Yukihiro “matz” Matsumoto,混合了他喜欢的语言(Perl、 Smalltalk、 Eiffel、 Ada 和 Lisp ) 产生了一种具有函数式及指令程序设计特性的新语言。他常说,他是“试着让 Ruby 更自然,而不是简单,就像生活一样”。
除此之外,他还提到:Ruby 就像人的身体一样,表面上看来简单,但是内部却相当的复杂.
在 1993 年,没有人会相信一个由日本业余语言设计者创建的面向对象的语言,能最终在世界范围内被广泛使用并且变得几乎像 Perl 那样流行。自从 1995 年 Ruby 公开发表以来,Ruby 在全球吸引了许多忠实的程序设计员。在 2006 年,Ruby 被广泛接受。在各大城市都有活跃的使用者并通过社区举办许许多多场场爆满的研讨会。
在 TIOBE, 最流行的开发语言排名调查中, Ruby 排名为全球第 11 位。 根据这样的成长情况,他们预测“在半年之中 Ruby 将会进入最受欢迎开发语言的前 10 名。”有越来越多受欢迎的软件如 Ruby on Rails web framework 是使用 Ruby 撰写而成,也是造成 Ruby 如此快速成长的原因。
Ruby 是开源软件, 不只是免费,而且可以自由的使用、复制、修改与发布。
Ruby 官网:http://www.ruby-lang.org
Ruby 特点
-
Ruby 是开源的,在Web 上免费提供,但需要一个许可证。
-
Ruby 是一种通用的、解释型的编程语言。
-
Ruby 是一种真正的面向对象编程语言。
-
Ruby 是一种类似于 Python 和 Perl 的服务器端脚本语言。
-
Ruby 可以用来编写通用网关接口(CGI)脚本。
-
Ruby 可以被嵌入到超文本标记语言(HTML)。
-
Ruby 语法简单,这使得新的开发人员能够快速轻松地学习 Ruby。
-
Ruby 与 C++ 和 Perl 等许多编程语言有着类似的语法。
-
Ruby 可扩展性强,用 Ruby 编写的大程序易于维护。
-
Ruby 可用于开发的 Internet 和 Intranet 应用程序。
-
Ruby 可以安装在 Windows 和 POSIX 环境中。
-
Ruby 支持许多 GUI 工具,比如 Tcl/Tk、GTK 和 OpenGL。
-
Ruby 可以很容易地连接到 DB2、MySQL、Oracle 和 Sybase。
-
Ruby 有丰富的内置函数,可以直接在 Ruby 脚本中使用。
Ruby 安装
方式1)命令安装:
sudo apt-get install ruby-full
//
Debian or Ubuntu
sudo yum install ruby
//
CentOS, Fedora, or RHEL
brew install ruby
// Mac
OS X
pkg install runtime/ruby-18
//
Solaris and OpenIndiana
sudo pacman -S ruby
//
pacman (Arch Linux)
sudo emerge dev-lang/ruby
//
portage (Gentoo)
方式2)源码安装
tar ruby-2.4.1.tar.gz
cd ruby-2.4.1/
./configure
sudo make
sudo make install
验证安装成功:
$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
Ruby 语法
Ruby的变量有一定的规则,
以$开头的一定是全局变量,
以@开头的都是实例变量,
以@@开头的是类变量。
常数则以大写字母开头;这种方法,对文本编辑器的命令补全很有帮助,如在vim下先键入$及开头字母,再敲击Ctrl+p,则可专门补全本文件以及关联文件中的全局变量,perl与php亦有此优点。
Ruby 使用
1. hello 示例
vim hello.rb
#!/usr/bin/env ruby puts "hello mimvp.com"
执行命令:
$ ruby hello.rb
hello mimvp.com
2. 函数类示例
Ruby是动态语言,你可以在程序中修改先前定义过的类。
也可以在某个类的实例中定义该实例特有的方法,这叫做单例方法。
vim mimvp_class.rb
#!/usr/bin/env ruby # # mimvp.com # 2009.8.30 class MyClass def the_method puts "hello mimvp.com" end end mc = MyClass.new def mc.the_method puts "hello proxy.mimvp.com" end mc.the_method # hello proxy.mimvp.com
3. Ruby 爬取网页
vim mimvp_spider.rb
#!/usr/bin/env ruby # # mimvp.com # 2009.8.30 require 'net/http' ## 方式1 h = Net::HTTP.new("mimvp.com",80) # 必须为 mimvp.com,不可以为 http://mimvp.com resp,data = h.get("/") puts data # 空 puts resp # #<Net::HTTPOK:0x007f99e18f2cf8> puts resp.body # 网页正文 ## 方式2 resp = Net::HTTP.get_response(URI("http://mimvp.com")) # 必须为 http://mimvp.com,不可以为 mimvp.com puts resp # #<Net::HTTPOK:0x007fe04301a650> puts resp.body # 网页正文 ## 方式3 运行时需传入参数: ruby mimvp-proxy-ruby.rb mimvp.com require 'uri' require 'timeout' require 'net/http' $resp = $data = nil begin timeout(5) { $resp = Net::HTTP.new(ARGV[0],80).get("/") # 方式1 $resp = Net::HTTP.get_response(URI("http://"+ARGV[0]+"/")) # 方式2 } rescue => e puts e.inspect exit end puts $resp.body # 运行命令: ruby mimvp-proxy-ruby.rb mimvp.com
class Net::HTTP 官方文档:
https://docs.ruby-lang.org/en/2.0.0/Net/HTTP.html
Ruby 代理设置
vim mimvp-proxy-ruby.rb
#!/usr/bin/env ruby # # Ruby 支持 http # # 米扑代理示例: # http://proxy.mimvp.com/demo.php # # 米扑代理购买: # http://proxy.mimvp.com # # mimvp.com # 2017-03-21 require 'rubygems' require 'net/http' require 'open-uri' require 'timeout' mimvp_url = "http://proxy.mimvp.com/exist.php" mimvp_url2 = "https://proxy.mimvp.com/exist.php" mimvp_url3 = "https://apps.bdimg.com/libs/jquery-i18n/1.1.1/jquery.i18n.min.js" $proxy = '183.222.102.95:8080' $proxy_addr = $proxy.split(':')[0].strip $proxy_port = $proxy.split(':')[1].strip puts $proxy_addr puts $proxy_port begin Timeout.timeout(30) { # mimvp_url = http://proxy.mimvp.com/exist.php # uri.host = proxy.mimvp.com # uri.port = 80 # uri.path = /exist.php uri = URI.parse(mimvp_url) result = Net::HTTP.new(uri.host, nil, $proxy_addr, $proxy_port).start { |http| http.get(uri.path) } puts result.body # mimvp_url = http://proxy.mimvp.com/exist.php # uri.host = proxy.mimvp.com # uri.port = 80 # uri.path = /exist.php # req = #<Net::HTTP::Get:0x007fafa594ff78> uri = URI.parse(mimvp_url) req = Net::HTTP::Get.new(uri.path) result = Net::HTTP::Proxy($proxy_addr, $proxy_port).start(uri.host, uri.port) {|http| http.request(req) } puts result.body # # proxy auth (NO TEST) # $proxy_addr = '<proxy addr>' # $proxy_port = '<proxy_port' # $proxy_user = '<username>' # 代理用户名 # $proxy_pass = '<password>' # 代理密码 # # $website_username = '<website_username>' # 目标网站登录用户名 # $website_password = '<website_password>' # 目标网站登录密码 # # uri = URI.parse(mimvp_url) # req = Net::HTTP::Get.new(uri.path) # req.basic_auth($website_username, $website_password) # # result = Net::HTTP::Proxy($proxy_addr, $proxy_port, $proxy_user, $proxy_pass).start(uri.host, uri.port) {|http| # http.request(req) # } # puts result.body } rescue => e puts e.inspect exit end
运行命令:
ruby mimvp-proxy-ruby.rb
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-12-13 00:40:19
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: Ruby 安装与开发 (米扑博客)