在Rails构建的网站中生成SiteMap
2010-04-15, Posted in Ruby, 软件开发 | 8 回复
Rails构建网站非常快捷方便,特别适合大型网站的敏捷开发,国内这样的网站也很多,比如软件开发交流社区javaeye等,对于用Rails构建的网部,怎么快捷的生成sitemap呢?那就是使用rails sitemap Plugin,这样的插件在github关注度比较高的有queso / sitemap及adamsalter / sitemap_generator,由于前者很久没有更新了,我们主要介绍使用后者。
Sitemap_generator 这个插件能快捷通过rake任务读取数据库信息等等生成sitemap,充许生成Gzip格式的sitemap文件,充许带参与及SSL的链接,如mypage_list?pageid=4及https等等。它也支持sitemap的index索引方式。共可以支持2.5个亿链接的网站URL生成,所以,一般情况下是够用了。当rake生成任务完成时,它同时会向google、yahoo等主流的搜索引擎发通知。下面我们来使用它
一、Sitemap_generator的安装
Sitemap_generator提供插件方式安装与gem两种方式安装
1、插件方式安装,直接在控制台运行如下命令,注意这需要你的环境中安装了git:
$ ./script/plugin install git://github.com/adamsalter/sitemap_generator.git
2、gem方式安装
首先修改config/environment.rb,增加如下代码:
config.gem 'sitemap_generator', :lib => false, :source => 'http://gemcutter.org'
然后运行
$ rake gems:install
然后再增加如下行到你的RAILS_ROOT/Rakefile文件
require 'sitemap_generator/tasks' rescue LoadError
再运行
$ rake sitemap:install
二、使用与简单的例子
生成sitemap需要一个rb文件,这就是config/sitemap.rb,我们可以运行如下命令自动生成这个文件:
rake sitemap:install
然后修改这个文件,首先把SitemapGenerator::Sitemap.default_host = “http://www.example.com”中的url改成你的网站地址,
而每生成一个url,都是通过类似sitemap.add articles_path, :priority => 0.7, :changefreq => ‘daily’的代码,所以你可以查询数据库,然后通过循环来动态生成。
三、生成与更新你的sitemap
代码完成后,运行
rake sitemap:refres
来生成或者更新你的sitemap,当然,他生成后,会自动去通知搜索引擎,如果你不需要这个功能,可以为这条命令增加一个-s参数,如下:
rake -s sitemap:refresh
如果你的网站的链接超过10万条,生成文件需要一定的时间,那么我建议使用系统的cron任务来更新你的sitemap。文件生成后,放在public目录了,最后你需要做的,就是在robots.txt增加一条记录:
Sitemap: /sitemap_index.xml.gz
什么意思不用问我了吧:)

四月 15th, 2010 on 10:59:08
这个不错啊,你的sitemap生成了吗?我瞧瞧去。
四月 15th, 2010 on 11:03:06
我的网站有sitemap的:-P
四月 15th, 2010 on 16:28:37
原来各下是高手哦
真的,提个意见哦
感觉你博客的模版不是很好看
四月 15th, 2010 on 16:33:50
高手不敢当哦,看来大家都不喜欢黑色,那我有时间的时候,再搞一个吧:(
四月 19th, 2010 on 10:24:54
来支持哈子哦
四月 20th, 2010 on 08:37:48
:)
四月 12th, 2011 on 18:48:44
都是通过类似sitemap.add articles_path, :priority => 0.7, :changefreq => ‘daily’的代码
↑
请问这句具体应该怎么写呢?那个article_path……
四月 22nd, 2011 on 11:29:25
#举例如下
Company.find_in_batches(:batch_size => 500, :select => ‘id, permalink’, :conditions => “state = #{State_Verified}”) do |companies|
companies.each do |c|
sitemap.add company_path(c), :lastmod => Time.now, :priority => 0.6 ,:changefreq => ‘daily’
sitemap.add company_path(c,:lang => “en”), :lastmod => Time.now, :priority => 0.6, :changefreq => ‘daily’
end
end