福满星城技术简介
开发&部署开发相关技术
- Ruby
- Rails
- Rspec
- Mysql & Redis
- Git
Ruby
一种跨平台、面向对象的动态类型编程语言
Ruby内容介绍引用 http://www.ruby-lang.org/zh_cn/about/
所见到的都是对象
在 Ruby 中,所有的东西都是对象,所有的信息和代码都可以给它们所拥有的属性和行为。面向对象程序设计中称属性为实例变量(instance variables),称命令为方法 (methods)。 从下列程序代码中看到 Ruby 能够给数字赋于行为,从这点可以证明 Ruby 是纯面向对象的语言。
5.times { print "We *love* Ruby -- it's outrageous!" }
在许多语言中,数字和其它原生的类型都不是对象。而 Ruby 受 Smalltalk
语言影响,让所有的类型都可以赋予方法及产生实例变量,并让这些规则适用于 Ruby 所有对象。
Ruby 的灵活性
Ruby 是一个相当灵活的语言,她允许用户去改变她本身。 Ruby 的核心部分可以被更改或重新定义,模块可以被添加。Ruby 试着不去妨碍程序员。
比如(+) 是用做加法的运算符。如果你更喜欢使用易读的 plus 的话,你可以给 Ruby 的内建 Numeric 类添加一个函数。
class Numeric
def plus(x)
self.+(x)
end
end
y = 5.plus 6
# y is now equal to 11
Ruby 的符号只是语法的甜头 (syntactic sugar)。你可以随时重定义他们。
Blocks,一个独特且强大的特性
Ruby 的代码块是非常强大的。程序员可以给任何函数添加一个密封 (closure) 来表述这个函数该如何工作。密封也被叫做代码块,是用过其他比如 PHP, Visual Basic 等规则语言的 Ruby 的初学者最喜欢使用的一个功能。
代码块取自函数语言。Matz 说:“我希望在 Ruby 的密封中融入 Lisp 的文化 [4]。”
search_engines =
%w[Google Yahoo MSN].map do |engine|
"http://www." + engine.downcase + ".com"
end
在上面的代码中,代码块是在 do ... end 中的结构。 map 函数将代码块应用到一个词的列表中。Ruby 的其他函数经常会为程序员留出一个空当给代码块来控制函数的功能。
Ruby 与 Mixin
于其他面向对象语言不同,Ruby “有意”只提供单继承。不过 Ruby 拥有模块(在 Objective-C 里面叫做类别)。模块是把许多方法放在了一个类别里。
类可以混合一个模块,得到这个模块提供的所有方法。比如所有提供 each 方法的类可以混合 Enumerable 模块,来得到这个模块提供的所有方法,当然这些方法都会调用 each 做循环。
class MyArray
include Enumerable
end
一般来说,Ruby 爱好者相对于复杂和限制颇多的多态继承方法来讲更偏向于这种混合方法。
Ruby 的面貌
尽管 Ruby 只用很少的符号并且偏向与英文单词做关键字,但是少量的符号也被用来装饰 Ruby。Ruby 不需要提前定义变量。它用简单的命名法来提示变量存在的范围。
- var 可以是局部变量。
- @var 是一个实例变量。
- $var 是一个全局变量。
这些信号让程序员更清楚的看到每一个变量的角色,增强了程序的可读性,也不需要在实例变量前面加上 self. 了。
更上一层楼
Ruby 还有其他丰富的特性:
- Ruby 有类似于 Java 和 Python 的异常处理,使处理错误更方便。
- Ruby 拥有一个针对所有对象的标识-清扫(mark-and-sweep)式垃圾收集器(garbage collector)。使用者无需维护扩展库中的引用计数(reference counts)。正如 Matz 所说:“这对您的健康有益。”
- 为 Ruby 写 C 的扩展比 Perl 和 Python 更容易。Ruby 有一个非常雅致的 API 从 C 语言调用 Ruby。这包括把 Ruby 作为嵌入式脚本语言时,从其他软件里调用 Ruby。SWIG 界面也是可选的。
- Ruby 可以在操作系统允许的情况下动态调用库。
- Ruby 提供不依赖操作系统的线程。所以在所有 Ruby 支持的操作系统里都可以使用多线程处理,不管操作系统支不支持,比如 MS-DOS!
- Ruby 极为轻便:它主要是在 GNU/Linux 上开发的,但也支持很多类型的 UNIX,以及 Mac OS X, Windows 95/98/Me/NT/2000/XP,DOS,BeOS,OS/2 等。
Rails
Ruby on Rails,简称Rails,是一个使用Ruby语言写的开源Web应用框架,它是严格按照MVC结构开发的。它努力使自身保持简单,来使实际的应用开发时的代码更少,使用最少的配置。
Rails的设计原则包括“不做重复的事”(Don't Repeat Yourself)和“惯例优于配置”(Convention Over Configuration)
关于Rails的特性并不做过多介绍,有兴趣的朋友可以看下面链接的内容
http://www.slideshare.net/ihower/ruby-on-rails-2028956
http://www.slideshare.net/agnessa/introduction-to-ruby-on-rails
代码行数统计
+----------------------+-------+-------+---------+---------+-----+-------+
| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers | 1375 | 1037 | 23 | 146 | 6 | 5 |
| Helpers | 43 | 40 | 0 | 3 | 0 | 11 |
| Models | 836 | 646 | 24 | 67 | 2 | 7 |
| Mailers | 0 | 0 | 0 | 0 | 0 | 0 |
| Javascripts | 221 | 139 | 1 | 32 | 32 | 2 |
| Libraries | 0 | 0 | 0 | 0 | 0 | 0 |
| Controller specs | 35 | 28 | 0 | 0 | 0 | 0 |
| Model specs | 392 | 307 | 0 | 0 | 0 | 0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total | 2902 | 2197 | 48 | 248 | 5 | 6 |
+----------------------+-------+-------+---------+---------+-----+-------+
Code LOC: 1862 Test LOC: 335 Code to Test Ratio: 1:0.2
LOC (Lines Of Code => program lines)
展示
- 页面功能列表
- 分类的CRUD代码
- jbuilder partial
- gem: geokit, ransack等
Rspec
一个单元测试框架,选择它的原型是在非Rails的普通Ruby项目也可以很方便的使用
测试的覆盖率很低,只写了抢票相关业务的单元测试.
- 修改代码运行测试后可以放心的上线
- 减少重复工作,不用每次都手动测试
- 多人协作时,方便他人修改代码
MYSQL & REDIS
选择Mysql的原理是因为它开源免费资料多,其实也想试试PostgreSQL
选择Redis因为抢票并发比较高,用Mysql实现有一定复杂度,而Redis是单线程,可以很简单的实现业务并保证数据的正确性.
Redis Hash
Redis的Hash数据结构和Java的Map接口一样,是键值对存储形式.
redis> HSET myhash field 5
(integer) 1
redis> HINCRBY myhash field 1
(integer) 6
redis> HINCRBY myhash field -1
(integer) 5
redis> HINCRBY myhash field -10
(integer) -5
GIT
只分享两个小技巧. 不做过多介绍,Git随便找个主题都可以讲上个把小时
Git ignore file
https://help.github.com/articles/ignoring-files
Git multiple remote repos
部署相关技术
- Linux
- Ansible & Mina
- Nginx & Puma
- God
- Backup
Linux
使用Ubuntu发行版本,编译依赖库相对Centos要新
相对Windows,某些任务能够更加简单的实现自动化
Ansible & Mina
Ansible 自动化系统部署工具
- 添加用户
- 安装软件
- 复制配置文件
Mina 自动化应用部署工作
- 通过ssh自动执行命令
- 保存历史部署版本
- 支持从git repos拿最新代码
NginX & PUMA
Nginx 轻量级HTTP服务器,占用内存小.
Puma 多线程的Ruby应用服务器
God
一个易配置,易扩展的服务进程监控软件
写Linux server shell太难了,不同的发行版本语法规则还不同.用God可以很简单的写出跨发行版本的开机自启动服务
Backup
备份你的数据库,文件,并支持压缩,加密,分割,上传
数据库支持: Mysql, PostgreSQL, Redis, MongoDB等
上传支持: ftp,sftp,scp, rsync,dropbox,local等
相关链接
- https://github.com/nadarei/mina
- https://github.com/meskyanichi/backup
- http://godrb.com/
福满星城技术简介
By cxh116
福满星城技术简介
- 1,397