stdout deployment

首先值得一提的是为了支持HostMonster的fastcgi,我人为copy了几个以raild -D生成的项目结构里面的dispatch文件以及create了一个.htaccess文件,如果你不用fastcgi(通常情况下你不需要,而且也不推荐),你可以简单的删除它们(以下RAILS_ROOT是指rails app的根目录):

RAILS_ROOT/config.ru
RAILS_ROOT/public/dispatch.cgi
RAILS_ROOT/public/dispatch.fcgi
RAILS_ROOT/public/dispatch.rb
RAILS_ROOT/public/.htaccess

[Development Environment]
Assume你的os已经装好ruby,如果没有请自行google,这里不再赘述。

首先update一下rubygems,最近rubygems貌似打了鸡血,更新极其频繁… 且bug具多…如果出了问题建议rollback到1.4.2…
[Note: 由于我使用rvm,所以以下command都没有sudo,根据你的情况你可能需要加上sudo]

$ gem update --system


从github上checkout一份最新的code,rails 2.3.11已经freeze进了source code,所以安装rails并不是必须的:

$ git clone git://github.com/samsonw/stdout.git
$ cd stdout

复制一份database.yml,不需要什么特别的修改,默认的dev环境配置是使用sqlite3的database:

$ cp config/database.yml.example config/database.yml

运行rake db:migrate之前确保已经装好了sqlite3-ruby gem和parse_feeds.rake所依赖的gem,不然rake可能会报错:

$ gem install sqlite3-ruby
$ gem install base64 json rest-client twitter nokogiri open-uri
$ rake db:migrate

如果没有报错,database应该已经建好,接下来我们需要给database populate some data,首先来搞Source表,编辑RAILS_ROOT/db/seeds.rb文件,修改blog的link或者删除某些不需要的link,也可以加上你需要的source,我默认加了4个source:

Source.find_or_create_by_name :name=>"blog", :display_name=>"Weblog", :url=>"http://blog.samsonis.me/"
Source.find_or_create_by_name :name=>"twitter", :display_name=>"Twitter", :url=>"http://twitter.com/"
Source.find_or_create_by_name :name=>"sina", :display_name=>"新浪微博", :url=>"http://t.sina.com.cn/"
Source.find_or_create_by_name :name=>"douban", :display_name=>"豆瓣", :url=>"http://www.douban.com/"

完成后我们就可以populate database:

$ rake db:seed

接下来来搞Activity表,这个表是需要实时更新的(我在production上是半小时一次),数据的更新是通过RAILS_ROOT/lib/tasks/parse_feeds.rake脚本完成的,根据你的需要你需要修改一下这个文件,比如blog的feed地址,sina的username/password,douban的miniblogs feed地址以及twitter的帐号(请自行注意翻墙),根据需要也可以删除或添加新的rake tasks,完成修改后,务必做下测试,我用一个vitual task stdout以简化运行(也为了之后方便cron job配置):

$ rake stdout

如果需要,你也可以执行单个task:

$ rake feeds:parse
$ rake twitter:parse
$ rake sina:parse
$ rake douban:parse

如果一切正常,database应该已经populate完成,大功告成,server start,http://localhost:3000/, welcome abroad:

$ script/server

[Production Environment]
完成了开发环境的搭建,Production的deployment就会简单很多(当然用fastcgi的不算),因为本质上是差不多的,区别可能只在database和web server的配置之上(我们是卢瑟,没有多少点击率的小site根本不需要load balance,不需要cdn,不需要nosql,不需要distributed).

database的配置请修改database.yml的production section,比如我们要用mysql database(最新driver是mysql2,不过as you may already know,HostMonser支持只支持mysql,你可以根据你的需要使用mysql2):

$ gem install mysql
production:
  adapter: mysql
  encoding: utf8
  database: MYSQL_DATABASE_NAME
  pool: 5
  username: MYSQL_USER
  password: PASSWORD
  host: localhost

web/app server建议使用passenger,然后apache抑或nginx,这里不再赘述;当然你也可以直接mongrel或是webrick抑或fastcgi.

最后你还需要配置一个cron job,定时更新数据,我在Production上每30分钟更新一次,你可以根据你的需要配置,比如某些话捞可能需要15分钟一次甚至5分钟一次:

15,45 * * * *  cd RAILS_ROOT && rake RAILS_ENV="production" stdout >/dev/null 2>&1

能回忆记起的大致就这些了,如果deploy中有问题请留言,I’m more than happy to assist.

历史上的今天:

Related posts:

4 Comments on "stdout deployment"

  1. Sunng China Mozilla Firefox Ubuntu Linux says:

    rest_client 这个好像找不到, gem install 的时候报错
    rake db:migrate下不去了

Trackbacks for this post

  1. stdout customization | Samson's Weblog United States WordPress Unknow Os
  2. Tiny LifeStream widget available on sunng.info United States WordPress Unknow Os

Got something to say? Go for it!

使用新浪微博登陆