Linux日志文件系统(EXT4、XFS、JFS)及性能分析

Ext4
ReiserFS Btrfs 等七种文件系统性能比拼

自上一篇《Ext2
v.s. Ext3 v.s. Ext4 性能比拼
》 发布以来,社会各界纷纷来电来函,给出了“Ext4
我看行”,“Ext4 牛牛牛”,“用了
Ext4,嘿,还真对得起这块盘”,“Ext4,碎片去无踪,性能更出众”等等热情洋溢的评论,兄弟我深受鼓舞。在对 Ext4
颇不低俗的性能进行表扬的同时,人民群众还提出了新的要求,希望看到与现有同类文件系统性能横向比拼的结果。为了满足广大群众的热切需求,今天做了
Ext2、Ext3、Ext4、XFS、JFS、ReiserFS 和 Btrfs 的全面性能测试,对比结果如下:

reclen write rewrite read rereadrandom
read
random
write
bkwd
read
record
rewrite
stride
read
fwrite frewrite fread freread
Ext2

real 27m23.545s
user 0m9.184s
sys 4m40.925s

4218,554218,662668,245245,20885,235175,284101,8641,911,57974,368215,014217,680583,169244,831
8216,064220,489618,661243,444146,695215,002176,9082,314,305129,333215,772218,571605,436241,144
16218,874219,173609,563242,592246,442220,306292,1142,438,520218,357216,497219,774596,211244,652
32219,584217,859611,712244,445372,023224,151442,6292,423,574334,999218,829219,553606,186244,346
64216,320219,400622,218243,761478,747227,018580,9602,633,117439,129215,956220,166608,210243,950
128219,286218,318614,559243,862579,724224,346690,9452,467,787537,440219,420218,330607,326244,337
256216,027220,509635,633245,385614,120227,099842,2202,567,169614,753217,744219,897617,728243,780
Ext3

real 27m26.675s
user 0m9.323s
sys 6m43.199s

4215,478218,294604,858246,14886,758151,858102,1131,618,76974,979214,446218,569568,659242,772
8217,695218,777609,377244,520148,608190,313171,9031,830,365128,957218,752217,501603,465246,861
16215,683219,822643,396248,815252,255202,374290,6811,915,488219,805216,519219,033568,086243,985
32219,341217,364603,462245,273379,512208,740435,7562,069,791335,303218,578219,086604,572245,578
64216,192220,186665,646244,234481,101212,185567,7502,106,710442,926217,075220,042618,134244,870
128218,503219,151616,479244,711589,927212,355683,9432,080,136541,597219,271218,514600,308244,782
256217,255219,213637,417248,555636,309211,793839,9072,125,314618,958218,424218,954600,894245,523
Ext4

real 26m15.771s
user 0m9.609s
sys 5m36.096s

4225,586224,616532,721270,17482,398180,231102,9351,683,47674,990224,893224,186277,025584,868
8226,896221,965274,314629,603239,913219,223156,9642,026,184127,553226,382227,019292,566593,154
16222,929229,392272,022599,360390,533223,951256,8312,114,002212,773227,728225,332602,317269,289
32223,703221,025566,981262,980380,787227,198435,7742,157,610338,629226,208225,816591,102268,725
64222,236223,813593,481268,002522,365227,268582,8302,216,225457,252228,294223,269614,376269,657
128221,681222,859285,304623,990915,430231,380663,3832,276,039573,624226,616224,477583,965271,159
256220,129221,608279,101657,815889,963232,256770,2202,212,083610,074225,877224,642288,852603,933
XFS

real 28m43.957s
user 0m9.899s
sys 6m4.268s

4217,459214,348244,600239,64778,424161,673107,6431,711,97674,828218,638216,903227,675240,492
8220,514219,994241,854951,125248,623207,750161,1752,214,681127,363218,892211,613219,749240,286
16220,776220,740226,186242,746224,486219,963318,5032,480,826223,664221,106221,694669,693262,346
32218,481216,919255,232799,715593,083225,213408,8162,278,034337,026222,153213,330226,093241,351
64216,921210,031228,877244,161430,479225,432612,8722,568,460448,155224,650209,745221,768239,888
128216,341218,284232,550242,283559,400227,915768,2512,545,859568,945222,605216,060714,911258,397
256221,444220,462469,309321,275757,895225,641806,2512,689,152609,077219,703219,815226,021240,108
JFS

real 26m53.990s
user 0m9.096s
sys 4m39.691s

4196,819218,121455,194258,06285,910169,163142,8141,949,28292,246212,270217,272450,996258,928
8211,794215,030445,452258,082147,556208,623236,1972,214,516159,402213,076218,146451,013258,767
16209,028214,714455,795257,989248,145218,747399,9352,587,176269,527214,271215,626439,736258,830
32210,454218,204448,067258,568380,325220,682591,7812,379,845409,061213,292217,683439,114259,160
64214,862215,636450,430258,413487,982222,660750,1392,613,574522,050216,365217,830444,546259,553
128213,152218,084449,185258,775592,912148,064933,5832,728,229667,878219,155213,461466,396262,608
256213,119213,514477,804258,508631,376129,0601,055,2052,727,762717,814213,771217,569463,931258,291
ReiserFS

real 28m16.075s
user 0m10.134s
sys 7m38.726s

4208,422217,932190,459223,68472,142175,21099,8201,726,65474,081211,433216,255540,847239,091
8214,840218,917610,592240,376146,908210,703176,2952,180,046128,114215,368218,950580,334240,261
16216,886217,827651,240243,800249,478219,967288,4572,444,958213,780217,438219,510592,932239,510
32214,217219,178645,366240,227369,030224,795434,5562,372,823329,006217,055217,110554,072240,046
64217,160219,013623,512239,875470,435224,619560,7902,429,552421,615218,043218,734587,074239,802
128215,163219,348624,117240,364572,926226,463683,6862,530,721530,024215,932218,157577,617240,975
256217,058218,839643,857240,141615,875224,530825,3642,631,201590,909217,256218,942567,422240,061
Btrfs

real 59m41.974s
user 0m10.382s
sys 18m40.804s

4214,203215,879265,389280,24465,36710,52016,032773,64434,26094,105194,357269,380268,254
8218,318215,978270,100275,160109,68726,01540,4471,366,91189,489141,760214,990273,446271,531
16219,477215,738284,876282,111178,66247,88172,6231,864,106150,255177,508219,348264,935273,140
32218,835220,886281,550277,054246,933130,288181,7742,573,279250,936204,491219,736281,894268,989
64216,758218,890282,026275,127312,803195,963299,6853,270,521354,200202,362220,928281,331271,676
128216,509220,235279,353274,813368,053215,445343,6963,739,759414,950216,029219,711276,973272,569
256220,333216,113277,920273,271405,215215,495393,7314,015,851474,052213,849220,372283,035277,594
Kbytes/sec

本次测试所使用的 Linux kernel 版本为 2.6.29-rc3,文件系统性能测试工具为 IOzone
3.318。

从 测试结果可以看出,Ext4 的综合性能位居现有文件系统之首,JFS、ReiserFS 在读性能方面亦有不俗表现。Btrfs
的小块数据读写性能与平均水平相差甚远,是导致其本次测试总时间超出平均时间两倍的主要原因。较之其它成熟的文件系统,Btrfs
投入生产系统运作可能尚需时日。

至于一小撮不明真相别有用心的群众提出还要测 NTFS、 Vfat、MSDOS 等“文件系统”,恕时间有限,不予受理。

http://www.360doc.com/content/11/1226/12/16531_175056567.shtml

———————————————————–
http://www.360doc.com/showWeb/0/0/175056758.aspx

Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版,修改了
Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4
可以提供更佳的性能和可靠性,还有更为丰富的功能:
1. 与 Ext3
兼容。

执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有 Ext3
数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。
2.
更大的文件系统和更大的文件。

较之 Ext3 目前所支持的最大 16TB 文件系统和最大 2TB 文件,Ext4 分别支持 1EB(1,048,576TB,
1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。
3.
无限数量的子目录。

Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。
4.
Extents。

Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在 Ext3 中要建立 25,600
个数据块(每个数据块大小为 4KB)的映射表。而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent
为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的 25,600 个数据块中”,提高了不少效率。
5.
多块分配。

当写入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用
25,600 次数据块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc)
支持一次调用分配多个数据块。
6.
延迟分配。

Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache
中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。
7. 快速
fsck。

以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode
表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode
了。
8.
日志校验。

日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4
的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3
的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。
9. “无日志”(No
Journaling)模式。

日志总归有一些开销,Ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。
10.
在线碎片整理。

尽管延迟分配、多块分配和 extents 能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4 支持在线碎片整理,并将提供
e4defrag 工具进行个别文件或整个文件系统的碎片整理。
11. inode
相关特性。

Ext4 支持更大的 inode,较之 Ext3 默认的 inode 大小 128 字节,Ext4 为了在 inode
中容纳更多的扩展属性(如纳秒时间戳或 inode 版本),默认 inode 大小为 256 字节。Ext4
还支持快速扩展属性(fast extended attributes)和 inode 保留(inodes
reservation)。
12.
持久预分配(Persistent preallocation)。

P2P
软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。Ext4
在文件系统层面实现了持久预分配并提供相应的 API(libc 中的
posix_fallocate()),比应用软件自己实现更有效率。
13. 默认启用
barrier。

磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit
记录,若 commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用 barrier,只有当
barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。(可通过 “mount -o barrier=0”
命令禁用该特性。)

————————————————————
http://www.360doc.com/content/11/1226/12/16531_175055973.shtml

      
北京时间1月15日消息,据国外媒体报道,谷歌正在将EXT2文件系统转到新的EXT4(the fourth extended file
system)文件系统。

来自谷歌的麦克-罗宾(Michael
Rubin)透露消息说,谷歌正考虑将EXT2系统升级,最终确定为EXT4系统。

他表示,他们还考虑过XFS和JFS。结果显示,EXT4和XFS的表现类似,不过从EXT2升级到EXT4比升级到XFS容易。

而Btrfs太具实验性,谷歌目前不会考虑。

分析称,EXT4最初的表现非常好,但是在某些内核条件下表现力降低。比如在Linux2.6.32内核条件下,EXT4的表现力降低,而Btrfs的表现力提高。

同时,谷歌雇佣了知名的Linux内核开发者Ted Ts’o,他对EXT4文件系统的开发起到了主要作用。

EXT4介绍:http://baike.baidu.com/view/2220807.htm

XFS介绍:http://baike.baidu.com/view/1222157.htm

JFS介绍:http://baike.baidu.com/view/1494218.htm

————————————————————————–

http://q.sohu.com/forum/5/topic/5453380

   
在Microsoft
Winsows的世界,硬盘可以格式化成NTFS、FAT32、FATl6等等不同的格式。同樣地,在GNU/Linux底下也是有很多不同的文件系统格
式可供选择。当前在GNU/Linux底下,比较常用的有这几种格式:Ext2/Ext3、ReiserFS、XFS和JFS等数种。

  除了Ext2以外,其它几种都是日誌型文件系统。那什麼是日誌型文件系统呢?
就是系统会多用一些额外的空间纪錄硬盘的数据状态,因而在不正常开关机后,不需整个硬盘重新扫描来恢复正常的系统状态。

  ●
Ext2:此为一非常老旧且不支持日誌系统的文件系统格式,早期的Linux玩家应该还记得吧,在每次不正常关机后,重新开机时错误检查会需要很久,而且在不正常关机下,常常会让你一次不见很多文件,现在已经很少人使用这类文件系统了。

   ●
Ext3:为Ext2个改良版,所以Ext2可以直接升级成为Ext3而不必重新格式化,这也可以让旧的Ext2系统更加稳定。而主要和Ext2的差別是
增加了日誌系统(metadata),所以在不正常开关机后,可以迅速使系统恢复。而因为它与旧有的文件系统兼容,因此很多发行版都缺省使用Ext3。但
是在实际测试上,它的硬盘使用率其实不佳,大概只有真正空间的93%会被使用到,至於其它性能测试表现则为中等。在格式化与创建文件系统的时间也是其它文
件系统的数十倍。

  ● ReiserFS::採用日誌型的文件系统,为Hans
Reiser所创,因此以他的名字来命名。技术上使用的是B*-tree为基础的文件系统,其特色为从处理大型文件到眾多小文件都可以用很高的效率处理。
实务上ReiserFS
在处理文件小於1k的小文件时,效率甚至可以比Ext3快約10倍,所以ReiserFS专长是在处理很多小文件。而在一般操作上,它的性能表现也有中上
的程度。

  ● XFS: />不错的表现。

  ●
JFS::为全球最大计算机供应商IBM为AIX系列设计的日誌型文件系统,技术上使用的是B+-tree为基础的文件系统和ReiserFS使用
B*-tree不同。IBM
AIX服务器在很多金融机构上使用,所以稳定性是沒话說的。而它最重要的特色是在处理文件I/O的时候是所有文件系统里面最不佔CPU资源的,也就是
CPU使用率最低。而且在这樣节省使用CPU的情況下,它的效率表现还有中上以上的程度。

  虽然Ext3性能不好(在日誌型文件系统中 效率上算是最糟糕的)
,那为何还有那麼多人使用?那是因为当时Ext3可以直接从Ext2升级,而不需要先备份数据,然后格式化后再把文件复制回去,所以使用人数最多。但这也
不能全然怪它,因为它为了和Ext2兼容,所以背负了很多的历史包袱。若是以性能为考虑,则可以选择ReiserFS或XFS。若是系统资源不多,要使用
最低的CPU使用率,那麼可以选择JFS,因为它有著最好的性能资源比。

Universal USB Installer, 從USB随身碟安裝、執行Linux

笨笨包的電腦上並沒有裝設光碟機,意思就是說,我如果要安裝任何作業系統,我就必須使用一個USB磁碟裝置。但是要如何可以將安裝檔案正確存放在USB磁碟裝置上,而且又能確實的開機和安裝呢?

在大陸有很多簡體中文的USB磁碟裝置的開機與安裝的程式,台灣大多使用英文版的軟體。一個朋友向笨笨包推薦了一套叫做Universal USB
Installer
的類似程式,因為以前沒測試過,所以這次來裝Linux試試看好不好用!

準備USB隨身碟

Universal USB
Installer是一個Windows環境下免安裝的一個小工具,你只要執行這個程式,所有的功能都在同一個畫面裏。我們先將最少要有2GB的容量的
USB隨身碟插入,然後再執行程式,因為這個程式無法偵測事後安裝的磁碟裝置(好像大多數類似的軟體都有這個問題)。

UniversalUSBInstaller1 Universal USB Installer, 從USB随身碟安裝、執行Linux

你可以透過下拉選單Step 1選擇你要安裝的Linux種類,無論是Ubuntu、Debian、Linux、Mint、Open
Suse…有十幾個可以選擇。

其實不是只有Linux,如果你想安裝Windows Vista或者是Windows 7也可以用同樣的方式。


UniversalUSBInstaller4 thumb Universal USB Installer, 從USB随身碟安裝、執行Linux

如果你沒有事先下載好安裝ISO的話,你可以經由這個工具直接下載要安裝的Linux ISO,只要將右邊的Download the
iso的框框打勾,立即就會打開瀏覽器開始下載。當下載完成或者你原本就有iso檔案的話,按一下Browser選取你要安裝的ISO檔案即可。

在Step
3那邊選擇USB隨身碟。它只會顯示可移動磁碟。雖然你可以設定顯示全部的磁碟機,但是我不是很建議這麼做,而且如果是安裝在硬碟上的話,有可能會破壞原有的作業系統。

UniversalUSBInstaller2 Universal USB Installer, 從USB随身碟安裝、執行Linux

我建議將磁碟機選單旁邊的format打勾,它會把USB隨身碟清除的乾乾淨淨的,裏面只要單純有Linux安裝程式即可。Step
4的Set a Persistent file size for storing
changes選項不用去理會,因為我們只是做這次安裝而已,不需要另外設定USB隨身碟的可用空間。

UniversalUSBInstaller3 Universal USB Installer, 從USB随身碟安裝、執行Linux

將Linux安裝程式複製到USB隨身碟上會需要一些時間,特別是與你的USB隨身碟速度有關。畫面會顯示目前進度以及複製過程。

使用USB隨身碟上的Linux安裝程式

現在,Linux安裝程式已經在USB隨身碟上準備好了,你有兩種方式可以應用:你可以在原有的Windows中直接執行Linux,或者在別台電
腦安裝Linux。你可能必須要先改變BIOS的開機順序,通常電腦開機都是由硬碟為第一個開機裝置,所以你要將USB磁碟裝置設定在第一個開機裝置上,
第二個才是硬碟裝置。

當你開機順序設定完成後,就讓電腦由USB隨身碟開機了,之後你只要跟著Linux的引導逐步安裝即可。

感想

我沒想到這次用USB隨身碟安裝Linux會那麼順利,下載小工具和複製到USB隨身碟的相關程式,調整BOIS,再到重新開機正式開始安裝總共花
不到10分鐘的時間。也就是說如果各位想要用USB隨身碟安裝作業系統的話可以考慮使用這套Universal USB
Installer。這個程式到現在為止配合Linux版本還不斷的更新,而且,官方網站上也有不少關於安裝Linux的評測說明,有興趣的人不妨到官方
網站看看!

官方直接下載

http://reader.feedshow.com/show_items-feed=5f97284424398189dd41d17bccc69bd6

Ubuntu, Ruby, RVM, Rails, and You

http://ryanbigg.com/2010/12/ubuntu-ruby-rvm-rails-and-you/
http://www.iloopai.com/blogs/11
http://ivanbernat.com/guides/install-rails-3-with-sqlite3-mysql-ubuntu-10/

25 Dec 2010

This beginner’s guide will set up with Ruby 1.9.2, RVM
and Rails 3.0.7 and is specifically written for a
development environment on Ubuntu 10.10, but will probably
work on many other operating systems, including older versions of
Ubuntu and Debian. YMMV.

If you’re looking for a way to set this up on a
production server then I would recommend the use of the railsready script
which installs all the necessary packages for Ruby 1.9.2p136 and
then that version of Ruby itself, Bundler and Rails. Then it leaves
it up to you to install Apache or nginx to get your application
online.

If you’re not using Ubuntu then try
Wayne E. Seguin’s rails_bootstrap_script
which probably gets a
version of Rails working for you, albeit with 1.8.7 rather than
1.9.2.

Under no circumstance should you install Ruby, Rubygems or any
Ruby-related packages from apt-get. This system is out-dated and
leads to major headaches. Avoid it for Ruby-related packages. We do
Ruby, we know what’s best. Trust us.

Still not convinced? Read this.

This guide will go through installing the RVM (Ruby Version Manager),
then a version of Ruby (1.9.2), then Rails and finally Bundler.

By the end of this guide, you will have these things installed
and have some very, very easy ways to manage gem dependencies for
your different applications / libraries, as well as having multiple
Ruby versions installed and usable all at once.

We assume you have sudo access to your machine, and
that you have an understanding of the basic concepts of Ruby, such
as “What is Rubygems?” and more importantly “How do I turn this
computer-thing on?”. This knowledge can be garnered by reading the
first chapter of any Ruby
book
.

Housekeeping

First of all, we’re going to run sudo apt-get
update
so that we have the latest sources on our box so that
we don’t run into any package-related issues, such as not being
able to install some packages.

Next, we’re going to install Git
(a version control system)
and curl which are both
required to install and use RVM, and build-essential
which is required to compile Ruby versions, amongst other
compilable things. To install these three packages we use this
command:

sudo apt-get install build-essential git-core curl

RVM

RVM is a Ruby Version
Manager
created by Wayne E. Seguin and is extremely helpful for
installing and managing many different versions of Ruby all at
once. Sometimes you could be working on a project that requires an
older (1.8.7) version of Ruby but also need a new version (1.9.2)
for one of your newer projects. This is a problem that RVM solves
beautifully.

Another situation could be that you want to have different sets
of gems on the same version of Ruby but don’t want to have to do
deal with Gem Conflict Hell. RVM has gemsets for
this. This is a feature you wouldn’t have if you used the
packaged Ruby
.

We’re going to use it to install only one version of Ruby, but
we can consult the
documentation
if we want to install a different version of
Ruby.

With git-core and curl installed we’ll
be able to install RVM with this command:

bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

The beautiful part of this is that it installs Ruby to our home
directory, providing a sandboxed environment just for us.

Once that’s done, we’re going to need to add a line to
~/.bashrc file (the file responsible for setting up
our bash session) which will load RVM:

echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc 

Then we’ll need to reload the ~/.bashrc file which
we can do with this small command:

. ~/.bashrc

The next command we run will tell us what other packages we need
to install for Ruby to work:

rvm notes
...
# For Ruby (MRI & ree)  you should install the following OS dependencies:
ruby: aptitude install build-essential bison openssl libreadline6 libreadline6-dev
curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0
libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf

A couple of these packages we’ve already installed, such as
git-core and curl. They won’t be
re-installed again.

These packages will lessen the pain when we’re working with
Ruby. For example, the libssl-dev package will make
OpenSSL support in Ruby work, libsqlite3-0 and
libsqlite3-dev are required for the
sqlite3-ruby gem and the libxml2-dev and
libxslt-dev packages are required for the
nokogiri gem. Let’s install all these packages now
using this command:

sudo aptitude install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g
zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf

This command *must* be written on a single line, otherwise
some of the packages will not install.

Now our Ruby lives will be as painless as possible.

Ruby

With RVM and these packages we can install Ruby 1.9.2:

rvm install 1.9.2

This command will take a couple of minutes, so grab your
$DRINKOFCHOICE and go outside or something. Once it’s done, we’ll
have Ruby 1.9.2 installed. To begin using it we can use this lovely
command:

rvm use 1.9.2

Are we using 1.9.2? You betcha:

ruby -v
ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-linux]

Or, even better, would be to make this the default for
our user! Oooh, yes!

rvm --default use 1.9.2

Now whenever we open a new bash session for this user we’ll have
Ruby available for us to use! Yay!

Rails

Now that RVM and a version of Ruby is installed, we can install
Rails. Because RVM is installed to our home directory, we don’t
need to use that nasty sudo to install things; we’ve
got write-access! To install the Rails gem we’ll run this
command:

gem install rails

This will install the rails gem and the other 22
gems that it and its dependencies depend on, including Bundler.

MySQL

If you’re planning on using the mysql2 gem for your
application then you’ll want to install the
libmysqlclient16-dev package before you do that.
Without it, you’ll get an error when the gem tries to compile its
native extensions:

Building native extensions.  This could take a while...
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

/home/ryan/.rvm/rubies/ruby-1.9.2-p136/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

PostgreSQL

Similar to the mysql2 gem’s error above, you’ll
also get an error with the pg gem if you don’t have
the libpq-dev package installed you’ll get this
error:

    Building native extensions.  This could take a while...
ERROR:  Error installing pg:
        ERROR: Failed to build gem native extension.

/home/ryan/.rvm/rubies/ruby-1.9.2-p136/bin/ruby extconf.rb
checking for pg_config... no
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Fin.

And that’s it! Now you’ve got a Ruby environment you can use to
write your (first?) Rails application in with such minimal effort.
A good read after this would be the official guides for Ruby on
Rails
. Or perhaps the documentation on the RVM site which goes into using
things such as gemsets and the
exceptionally helpful per-project
.rvmrc file
. A quick way to generate an .rvmrc
file is to run a command like this inside the project

rvm use 1.9.2@rails3 --rvmrc

RVM is such a powerful tool and comes in handy for day-to-day
Ruby development. Use it, and not the packages from apt to live a
life of development luxury.

Credits

Thanks to krainboltgreene for
pointing out that the guide needed to install the packages
specified by rvm notes. He’s got a similar write up here for Ubuntu
10.04
. Some of the instructions in this guide were “inspired”
by that post.

1、先安装gcc,mysql和一些库

sudo apt-get update
sudo apt-get upgrade
sudo dpkg-reconfigure tzdata
date

sudo apt-get install gcc
sudo apt-get install build-essential
sudo apt-get install git-core
sudo apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev libreadline5-dev

sudo apt-get install mysql-server mysql-client
 

2、编译ruby1.9.2 :

先下载源代码:http://www.ruby-lang.org/en/downloads/

tar vfxz ruby-1.9.2-p180.tar.gz  
cd ruby-1.9.2-p180
sudo ./configure --prefix=/usr/local/ruby-1.9.2

sudo make
sudo make install  

#添加路径
sudo gedit /etc/profile
#加入如下内容并且保存,注销就可以了
if [ -d "/usr/local/ruby-1.9.2/bin" ] ; then  
    export PATH=/usr/local/ruby-1.9.2/bin:$PATH
fi 

#查看安装到ruby版本
#sudo用到环境变量没搞清楚...加个-i就行了
sudo -i ruby -v

#安装rails,这儿也用-i
sudo -i gem install rails -y

设置MQSQL的UTF-8编码方式:

$sudo gedit /etc/mysql/my.cnf  #编辑添加如下内容
[mysql]
default-character-set = utf8 
[mysqld]
default-character-set = utf8 
init_connect = 'SET NAMES utf8' 

[client]
default-character-set = utf8

sudo /etc/init.d/mysql restart  #运行
sudo netstat -tap | grep mysql  #检查

#检查MYSQL查看编码,用MYSQL命令: 
show variables like'character%';  
#或者:mysql -u root -p
Enter password: ******
> \s # 查看是否配置成功
Client characterset:    utf8
Server characterset:    utf8
>quit

#Install nginx+passenger

sudo -i gem install passenger
sudo -i passenger-install-nginx-module

用rails new 新建 app

rails new blog -d mysql

现在3.0.7版本的mysql2不能用最新版,需要添加个限制

cd blog
gedit Gemfile

把gem ‘mysql2’改成: gem ‘mysql2′,'<0.3’
然后运行:bundle,如果提示下面到错误就是少了些运行库了:Could not create Makefile due to
some reason, probably lack of necessary libraries and/or
headers.
安装库:

sudo apt-get install libmysql-ruby libmysqlclient-dev 

在运行bundle就能正确安装mysql2了
执行:rake db:create还是出错…这个是rake
0.9版本到问题,这个有人给出了方法:打开刚才新建的app根目录下的Rake文件,在里面添加:

#注意把Blog改成你自己到模块名
module ::Blog
  class Application
    include Rake::DSL
  end
end

module ::RakeFileUtils
  extend Rake::FileUtilsExt
end
#这个是原来rake文件到最后一行,不是添加的,注意这个“Blog”就是你的模块名字
Blog::Application.load_tasks

第二种方法就是卸载0.9版本的rake了:

sudo -i gem uninstall rake -v 0.9
sudo -i gem uninstall rake -v 0.8.7
sudo -i gem install rake -v 0.8.7
 

我的系统里有rake 0.9和rake 0.8.7,把rake
0.9卸载了就找不到rake也许要加个链接到ruby/bin目录,我偷懒直接把2个都卸掉然后再安装0.8.7

这个就是安装mysql2过程中出现的问题:http://blog.csdn.net/linhx/archive/2011/03/29/6286899.aspx

配置ngnix:/opt/nginx/conf/nginx.conf

server {
        listen       80;
        server_name  localhost;
        root /home/xxx/rails_app/blog/public;  #xxx这个就是你刚才新建的app的public目录到完整路径
        passenger_enabled on;  
        rails_env development;     #设置为开发环境,默认是生产环境
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #location / {
        #    root   /home/leslin123/rorails/helloMySQL/public;
        #    index  index.html index.htm;
        #} 

配置Nginx为启动项:

sudo apt-get install curl#在终端里输入curl,如果提示未安装就用这个命令安装,如果已经存在就跳过
curl -L http://bit.ly/nginx-ubuntu-init-file > nginx
sudo mv nginx /etc/init.d/
sudo chmod +x /etc/init.d/nginx 
sudo /usr/sbin/update-rc.d -f nginx defaults
sudo /etc/init.d/nginx start 

在浏览器里输入:127.0.0.1,看到Welcome to nginx!就是安装成功了,如果已经设置了rails
app的目录应该是rails程序到欢迎界面了
每次修改了nginx配置后需要重启生效:

sudo /etc/init.d/nginx restart 

注:如果提示:Access denied for user ‘root’@’localhost’ (using
password: NO)重启下nginx试试

用到的链接:rvm安装方式,只采用了前面:http://www.yangzhiping.com/tech/ubuntu-ree-nginx-passenger-rails3.blog.html

编译ruby1.9.2以及配置:
http://hi.baidu.com/rikioy/blog/item/57fdfe38b87ce3ccd462256a.html

解决mysql2版本不相容的问题:http://stackoverflow.com/questions/5840742/version-
of-mysql2-0-3-2-doesnt-ship-with-the-activerecord-adapter-bundled-anym

执行rake出错解决方法:http://stackoverflow.com/questions/5287121/undefined-method-task-using-rake-0-9-0-beta-4

安装mysql2不成功:http://blog.csdn.net/linhx/archive/2011/03/29/6286899.aspx

activescaffold+rails2.3.4+本地化 记录

这两天把原有一个项目从rails 2.2.2升级到了rails
2.3.4,在activescaffold插件上耗费了许多时间,但总算都解决了。
1.升级activescaffold
  首先要说明的是AS的官网很是诡异。里面的文档几乎不更新,反而github
wiki上才是最新的。所以大家不要找错地方了。
   按照文档,升级AS到2.3版本需要以下两步:
   1). ruby script/plugin install
git://github.com/activescaffold/active_scaffold.git
   2). ruby script/plugin
install git://github.com/ewildgoose/render_component.git -r
rails-2.3

  但是注意:
第二步安装的render_component插件在rails 2.3.4上并不能使用。启动时会出现
无效的方法”set_session_options”的错误
。我最后是在github上找了另一个render_component插件才好的。在这里浪费了我至少2个小时。

   2). ruby script/plugin install
git://github.com/weplay/render_component.git

2.中文化

 
原来我使用的是localization插件。并在Object类中加入了as_()方法来实现中文化。可是此插件在rails
2.3.4中也会报错。于是我就直接采用rails自带的I18n国际化方法。当然还是需要加入as_()方法.代码如下

 

Ruby代码  收藏代码记录” />
  1. class Object  
  2.   def as_(string, *args)  
  3.     if string  
  4.       I18n.t(string,*args)  
  5.       if (r =~ /^translation missing/)  
  6.         return string  
  7.       end  
  8.       return  
  9.     else  
  10.       return string  
  11.     end  
  12.   rescue  
  13.     return string  
  14.   end  
  15. end  

 

   附上翻译文件:

 

http://www.iteye.com/topic/484236

10款难看但好用的SEO工具

http://www.36kr.com/p/45332.html

人不可貌相,SEO工具也不例外。

SEO专业网站SEOmoz总结了十个SEO工具,这些工具看上去其貌不扬,甚至有些丑陋,但功能却非常强大、实用。

下面我们就来看看这十大难看却好用的SEO工具:

1. Shared Count

给力之处:Tom
Critchlow
开发的Shared
Count
不仅可以跟踪Twitter、Facebook、LinkedIn、Google+等社交网络上的社交分享统计数据, 而且还提供一个开放API,也就是说你也可以通过它开发自己的工具。

Shared Count

难看之处:该网站几乎没有任何设计可言。

2. IETester

给力之处:在检测浏览器兼容性的时候,IE总会让你忙个不停。IETester是一个免费的、可下载的浏览器,可以让你渲染不同版本的IE浏览器,放在同一个窗口中进行对比,然后检查错误。此外还支持调试模式。

难看之处: 什么东西到了IE6下都很难看,IE6本身也不例外。

3. Blogscape

给力之处:Blogscape允许你按天监测任何关键词、品牌或链接的热门程度。你只需输入一个关短语或网址链接,然后就可以看到大量提到这些内容的列表。如果你懂高级检索操作符的话,你还可以跟踪仅含有某个特定域名的文章,是发现新链接的利器。

Blogscape SEO Tools

难看之处:
这是一个收费工具,如果你不是付费会员,登录页面更加难看。

4. URI Valet

给力之处:URI
Valet
通过10个工具完成技术检查、网址点评等工作。你可以查看任何网页的服务器header,文本、HTML比率、下载速度等信息,并且可以进行W3C验证。

URI Valet

难看之处:谁说你需要一名图形设计师才能做出一个网页工具呢?

5-6. Robots.txt 检查器

http://tool.motoricerca.info/robots-checker.phtml
http://www.frobee.com/robots-txt-check

给力之处:两者实力相当,都可以发现robots.txt文件中的问题,并且还能发现不可见的错误。他们甚至还可以对文件中的隐藏代码作出解释,这些文件可以对搜索引擎爬虫产生影响。

Robots.txt

难看之处:robots.txt文件是很枯燥,但这并不意味着你的界面也要这么粗糙。

7. Wayback Machine

给力之处:Wayback
Machine
有一个巨大的网页存档,你可以查到15年前的页面。如果你想研究消失的链接或者跟踪网站修改对网站流量的影响,Wayback
machine可以让你回到从前。

Wayback Machine

难看之处:能看看你喜欢的网站在1996年的样子是件挺酷的事,但你必要一直保留1996年的那个logo吧,而且一直在测试期,搞毛啊?

8. SEO Browser

给力之处:从网页标签开始,一眼洞穿网页的SEO结构。该网页有robots.txt文件吗?安装了分析工具了吗?SEO
Browser
可以通过一个页面让你一目了然。

SEO Browser

难看之处:该网站的标语是:用搜索引擎的眼光查看你的网站。不幸的是大部分搜索引擎看上去都很漂亮。

9. Rank Checker(排名查看器)

给力之处:Rank
Checker
由SEObook出品的一个火狐插件,可以让你随时检测网站关键词的排名。

SEOBook's Rank Checker

难看之处:并不难看,但速度太快。

10. Xenu’s Link Sleuth(链接侦探)

给力之处:很多人认为Xenu’s Link
Sleuth
是一个运行在桌面电脑上的链接检查器,可以帮你发现网站中的死链,但其极简的界面和通俗易懂的报告使其成为一个网站审计的得力工具。

Xenu

难看之处:在Google上搜索Xenu,你的第一反应是后退,检查搜索结果。有可能是SEO工具中有史以来最难看的登陆页面,好像是回到了1992年。但请放心,这个网站没问题,只是有外星人而已。

除非注明,本站文章均为原创或编译,转载请注明: 文章来自36氪