搭建环境

一、安装Ruby

http://rubyinstaller.rubyforge.org/上下载最新的Ruby one-click Installer for windows。

所有选项都选择。一顿经典的next之后,我们就安装了Ruby。

二、使用Rubygems安装Rails

因为刚才经典的next,我们已经成功的安装了Rubygems,利用它可以安装Rails。

gem包含很多子命令和相应的选项,感兴趣的可以在dos窗口下输入gem -h来查看帮助。

好了,让我们用一条语句来安装Rails。

首先确保你的计算机连接到了internet。

在dos窗口下输入:gem install rails --remote

等待吧。。。

有yes or no的地方按“y”

三、数据库的选择

要说Rails对数据库的连接,用mysql吧,这可是官方推荐的。至于mysql安装与配置,再次不赘诉了。

现在,我们已经搭建了开发Rails应用的环境,马上就要开始Rails应用的编写了。呵呵

Ruby简介

Ruby 是由日本人松本行弘发明的一种面向对象的脚本语言。虽然很多语言都宣称自己是面向对象的,但是每种语言的解释都不一样,大多是以它们自己特有的方式来解释什么是面向对象,而实际情况中,这些面向对象语言又都采用了很多非面向对象的做法。以 Java 为例:如果你想对一个数字取绝对值,你会怎么做呢? java 的做法是

int c = Math.abs(-166);

也就是将一个数值传递给 Math 类的一个静态函数 abs 处理。为什么这么做?因为在 java 中, 数值是基本类型不是类。

而在 Ruby 中,任何事物都是类, 也就是说,数字 –166 就是对象,取绝对值这样的操作应该属于数字本身,所以”Ruby 方式”的做法就是:

c = -166.abs

这种做法是不是更直观一点。

接着我们来介绍一下 ruby 语言的一些简单特点。

如何定义函数

def hello(name)

result = "hello, " + name

return result

end

这就是一个最简单的函数定义。Ruby 以 def 开始一个函数定义,后跟着 函数名, 然后是 参数,但是参数不必非要放在括号中, 你可以这样定义 def hello name ,之所以要用括号是为了更清晰。在 ruby 中你可以用多种方式来完成同一件事情,这也是 ruby 的设计思想。

Hello 函数很简单, 将参数和 “hello, “字符串组合在一起,赋值给临时变量 result ,然后再返回 result。 你会注意到 result 变量并没有申明,因为在 ruby 中无需申明,变量在赋值中自动使用。 另外 ruby 中不需要使用 ; 来结束每个语言,只要保持每条语句在单独一行就可以。 Ruby 也不包含 {} 来定义块结构, if , when 函数都以一个 end 关键字来结束。缩进不是语法(python 程序员要失望了)。第一次使用ruby 我也有点不习惯,因为我认为python 语言的缩进语法可以使得阅读程序代码更容易一些。但是学习了一段时间后,我发现缩进语法并不是那么重要,Ruby 本身带来的帮助远比这个更重要。而且代码的易读性也不是由缩进来改善的.此外上面的代码还可以更简化。

def hello (name)

" hello, #{name}"

end

在 ruby 中,函数的最后一条语句如果是表达式,那么它就作为返回值。在上面的代码中,用到了另外一个概念,就是表达式插入,字符串可以用单引号和双引号来括起来。但是两者还是有一点区别。区别在于处理时间上的不同。如果使用单引号,那么处理的时间很短。如果使用双引号,那么你可以插入变量,表达式,还有就是转意字符的替换,最常见的是 \n,\t 等。 以上面的代码为例 字符串中插入了变量 name ,字符串中插入变量以 # 开始,变量放在{}中。 但是特殊变量可以不用 {}. 那么什么是特殊变量呢。这个也是 ruby 特别的地方。在 Ruby 中,全局变量以 $开头,静态变量,也就是类变量以 @@ 开头,实例变量以 @ 开头。如果在字符串中引用 实例变量,你可以这么写。

def hello

" hello, #@name"

end

关于变量和基本结构我们就简单介绍这些,下面我们要介绍一个重要的Ruby 概念。就是 interator (迭代器)。 这个概念遍布在很多 ruby 代码中,也是最常见的 ruby way 。正是因为 interator ,在 ruby 程序中,你很少会看到循环的使用。 举个最简单的例子,如何打印从 1 到 6 的结果。

在 java 等语言中,我们的实现方法是:

for(int i = 1; i<6;i++) {

System.out.println(i);

}

而在 ruby 中,一切皆为对象,数字本身就是对象(我们在前面已经介绍过了),数字本身有它自己的迭代器 times 。那么让我们看看它的实现。

6.times {|i| p i }

是不是很简单。

迭代器的概念很有趣,它是如何在 ruby 中实现的呢。每个函数可以不光带有参数,还可以在参数后面带一个代码块。代码块在ruby 中是以 {} 和 do end 来包围起来的。通常如果是单行使用 {} ,如果是多行这使用do end 。这并非强制,只是习惯性用法。

代码块和参数并不相同,它和函数的执行可以说是并行的,确切的说是接替进行。如果在函数内部如何在运行过程中碰到了 yield ,它就会将函数执行过程交给函数附带的代码块来执行,代码快执行完了,执行流程转到函数内部继续运行。似乎很难理解,以下面这段代码来理解可以会容易一些。

def callBlock

yield

yield

end

callBlock { puts "In the block" }

输出:

In the block

In the block

CallBlock 函数中只有两个 yield 语句,它在执行过程中将执行权交给 函数附带的 block 运行,block 输出字符串 "In the block" ,这样最终结果就是输出两行 "In the block" 。 在函数内部使用 yield 还可以带任意多参数。比如

yield a, b, c

这三个参数对应代码块中的三个参数 {|x,y,z| p x y z }

又有一位单位上的老革命去世了

继昨年单位上的一位我尊敬的老师60来岁就去世了,今天,刚一上班就听说了本单位的一位66岁的老革命在前天去世了。上午和单位的同事一起到殡仪馆参加了他的追悼会。

这位老革命生前性格还乐观,但是60岁左右刚退休就因为得糖尿病眼睛瞎了,而且听说因为家事一直也不是很开心。直到去世。具体情况不清楚,听说而已。

死亡是无情的,但又是绝对公正的。

死亡对于生者也许是很好的一个导师。

停止guest公共帐号,启用公共测试帐号:test , 123456

guest帐号的起因:游客帐号可以作为一个公用的注册帐号使用

guest帐号的问题:

1、摘自:系统使用及测试反馈


 标题: 应该关闭guest帐号的发帖功能  作者: littlebat  创建时间: 2006-06-27 22:39:39  最近更新: 2006-06-27 22:41:35  编辑  删除

内容

  在注册用户编辑私有帖子的时候,如果session失效,那么帖子就成了公共的guest帐号的私有日记了-也就是成了公开日记了。所以guest帐号的权限和角色应该重新考虑。

  而且,从游客帐号可以作为一个公用的注册帐号使用增加了用户参与的方便性,但是并没有增加用户参与的积极性,从 2005年12月这个帐号开始使用至今,这个帐号有意义的使用只有一次:[转]2005年IT人士生存状态 ,所以,guest帐号预先的想法并没有实现。

  为了延续guest这个用户,可以把他设成为一个测试帐号。而常规的guest依然回到只读的角色。

2、因为各种搜索引擎频繁访问网站,而它们好像是不保持session的,每访问一个页面都要登录一次guest帐号,增加系统数据库负担。

鉴于以上原因,停止guest公共帐号。原来的guest帐号下的帖子转到测试帐号test下。测试帐号为:用户名:test ,密码:123456,欢迎游客用测试帐号登录测试。如果你觉得本站对您有用,建议注册您自己的帐号,加入我们的目标式JAVA学习之旅。

站内链接的优化(转帖)

站内链接的优化  2006年11月2日

大家都知道外部链接对网站排名的重要性,同时也建议不要忽略了站内链接的作用。

外部链接大部分情况下是不好控制的,而且要经过很长时间的积累,内部链接却完全在自己的控制之下。下面列几个优化站内链接的经验。

建立网站地图

只要有可能,最好给网站建一个完整的网站地图sitemap。同时把网站地图的链接放在首页上,使搜索引擎能很方便的发现和抓取所有网页。

有不少CMS系统并不自动生成网站地图,可能需要加一些插件。对大型的网站来说,可以把网站地图分成几个文件,每个文件里不要放太多网页。

每个网页最多离首页四次点击

对一个中小型网站来说,要确保从首页出发,四次点击之内就要达到任何一个网页。当然如果在三次点击之内更好,两次就更好。配合网站地图的使用,这一点应该不是大问题。

大家可以计算一下,四次点击至少可以有几百万个网页,所以对一般网站应该是可以适用的。

尽量使用文字导航

网站的导航系统最好使用文字链接。有的网站喜欢用图片或者JS下拉菜单等,但SEO效果最好的是文字链接,使搜索引擎可以顺利抓取,而且通过链接文字了解这些栏目页的具体内容。

如果为了美观不得不使用图片或者JS,至少在网站底部或者在网站地图中应该有所有栏目的文字链接。

链接文字

网站导航中的链接文字应该准确描述栏目的内容,自然而然在链接文字中就会有关键词,但是也不要在这里堆砌关键词。

在网页正文文章中提到其他网页内容的时候,可以自然而然的使用关键词链接到其他网页。反向链接中的关键词也是排名的重要因素之一,在自己的站内自己有完全的控制权。

整站的PR传递和流动

只要有好的网站整体结构,整个网站的PR传递应该是很均匀的,首页最高,栏目页次之,内容页再次。

但有的时候可以通过网页的链接影响PR和重要性的传递,使某一页或某几页的PR值和重要性升高,这几页也是你重点要推的网页。

网页的互相链接

以前说过网站的树型结构,不过要注意的是,这种树型结构不是说各个栏目下的文章页之间没有链接,恰恰相反,应该在不同栏目的网页中链接向其他栏目的相关网页。整个网站的结构看起来更像蜘蛛网,既有由栏目组成的主脉,也有网页之间的适当链接。

作者: Zac

原载: 搜索引擎优化SEO每天一贴

版权所有。转载时必须以链接形式注明作者和原始出处及本声明。

收藏本页到:

365Key | del.icio.us

相关文章:

    * URL的优化

    * Google链接分析专利

    * Zac是谁?

    * 网站内容与技术性优化并行

    * Blog优化的局限

发表于分类目录SEO技术 ||

“站内链接的优化”2个评论

   1. 塑钢门窗说:

      2006年11月3日 at 9:17 am

      恩 学习,现在很多的门户网站非常注重内部的连接,我想问一下,用什么可以实现网站内部网站关键词的内部链接?比如软件之类的?

   2. littlebat说:

      2006年11月3日 at 1:41 pm

      zac的这篇文章太实用了。我正在重新写小站的导航系统,这篇文章可以作为重要的依据。

      尤其是:

     


      链接文字

      网站导航中的链接文字应该准确描述栏目的内容,自然而然在链接文字中就会有关键词,但是也不要在这里堆砌关键词。

      在网页正文文章中提到其他网页内容的时候,可以自然而然的使用关键词链接到其他网页。反向链接中的关键词也是排名的重要因素之一,在自己的站内自己有完全的控制权。

     

      这段很有启发。

      我转帖了这篇文章在小站的“建设学习日记”目标下。

提问的智慧(转载)

我对向朋友请教问题一直持肯定态度。原因如下:

1、现代的知识大爆炸,每个人掌握的领域都有局限性,我们在一个方面熟悉,在另一个方面不一定就熟悉。我们可以互相交流,共同提高;

2、节约时间:因为一个问题,也许答案在过来人的口中就是几个字的事情,而对于一些未经历过的人来说也许就是几天甚至更长时间的探索。

所以,我自己爱问问题,也欢迎任何人问我问题,因为能够以自己一点有限的知识给朋友带来帮助也是一件快乐的事。

但是,反过来看,有的朋友(包括我有时候),常有一个乱问问题的毛病。总之一句话,问问题之前先要经过自己的头脑。更详细一点的问自己:

1、我想过这个问题吗?

2、我在网上搜索过这个问题吗?

如果这两个问题我们都回答的是“YES”,那么,我觉得我们可以向网上的先行者们请教了。请教之前不妨前加一句:这个问题经过我的思考和搜索,没有能解决,特向各位朋友问一下。...

我说的这些都是表皮,下面这篇经典的转帖来自网上,向原作者Eric Steven Raymond和译者王刚表示深深的敬意。

声明:转帖这篇文章完全出于交流目的,Eric Steven Raymond先生在他的版本声明中说:


    *      You may link to any portion of this site that you wish.

    *      You may mirror any portion of this site that you wish.

    *      You may not make or redistribute static copies (whether print or online) without my express permission.

In general, I want lots of people to see my content, and if you want to help with that I'm happy to let you. However, I don't like having old, stale versions of my content floating around on other peoples' sites. These rules are mainly designed to try to ensure that when some third party sees my name on a document, the content reflects all my updates to it.

Eric Steven Raymond先生的主要目的还是想让更多的人看到这篇文章,但是不愿让那些标着他名字的文档提供的是过时的内容。我将按Eric Steven Raymond的意愿来转帖他的文章。虽然中文译本我找不到相应的版权声明,但我还是以原创者的意愿来做。

转帖正文:(转自:提问的智慧

英文版原址:How To Ask Questions The Smart Way

因为这篇文章很长,我把转帖放在这篇日记的评论中。注意这篇帖子的转载日期,我将努力把最新的中文版更新在此。这也是这篇文章的原创者的意愿。

也许是永远也搞不懂了的"bean:write"怪事

学习日记里有3个jsp文件,接受action送来的一个帖子列表,然后循环的用struts中<bean:write/>标记显示出来。

帖子中有一个在3个jsp文件中都有的属性名为"myLastUpdate",在文件:processGoal.jsp中一切正常,但在finishedGoal.jsp和quitedGoal.jsp中却在网站空间中报告帖子对象的一个myLastUpdate的getter方法抛出异常。而同样的文件在本地用Tomcat5.0正常。空间用的是resin2.*。

具体是这3个文件都有一段如下的代码在文件:processGoal.jsp中一切正常,但在finishedGoal.jsp和quitedGoal.jsp出问题:


...

      <td width = "10%" align="center">

        <bean:write name="anGoal" property="finishDate" scope="page" filter="false"/>

      </td>

 

      <td width = "10%" align="center">

        <bean:write name="anGoal" property="myLastUpdate" scope="page" filter="false"/>

      </td>

...

最后,实在找不到原因了,用了jstl中的<c:out/>标记来输出这个对象的"myLastUpdate"属性才全部正常。

如下所示:


...

      <td width = "10%" align="center">

        <bean:write name="anGoal" property="finishDate" scope="page" filter="false"/>

      </td>

 

      <td width = "10%" align="center">

        <c:out value="${anGoal.myLastUpdate}"/>

      </td>

...

这个问题实在是不应该,可就是出现了。也许是Struts中的<bean:write/>加上属性名myLastUpdate加上resin服务器这三者的偶然巧合出现了这个错误?如果有知道答案的朋友指点一下。

如果,你碰巧碰到这样的情况,不妨在jsp文件中改一下取得对象属性的方法,也许就解决了你磨破脑袋也找不到原因的问题。