最近学了一门Web Application Architectures,本来是打算借鉴一下其中的架构,然后用golang做一个简单CMS类应用实现的,但是学完发现,ROR用来开发的效率还不错,而且能自动生成不少代码。

即使相对于号称快捷开发的django,同样的任务,ROR的编码量还要更少一些,但有些人认为,django的架构,要更容易控制一些,参考很有意思的一篇blog, RAILS VS DJANGO: AN IN-DEPTH TECHNICAL COMPARISON.

安装

在Archlinux下,直接安装ruby

root# pacman -S ruby
root# gem install rails

在其他操作系统上,包括ubuntu,ruby的版本太老了....可以参考rvm,可以在railscast上找到相关视频

创建应用

安装完rails之后,可以直接创建应用了

root# rails new blog

应用自动建立了相关目录,主要有

  • config 配置目录,主要有数据库的配置,router的配置
  • db 数据库的shema
  • public 404文件等
  • app MVC相关的东西,其中
    • assets js和css文件
    • models (MVC 中的M)
    • views (MVC 中的V)
    • controller (MVC中的C)

添加数据库支持

rails默认使用sqlite,也可以使用mysql,甚至mongodb,以mysql为例 首先安装mysql以及相应的gem

  • 安装mysql(以Archlinux为例)
root# pacman -S  mysql ; gem instamysql2
  • 编辑config/database.yml (注意看默认配置文件的 <<: *default 的代码复用)
development:
    adapter: mysql2
    #使用的数据库
    database: db_name_dev
    #mysql用户名
    username: woo
    #mysql密码
    password: aabb
  • 增加post和comment数据结构
root# rails generate scaffold post title:string body:text
root# rails generate scaffold comment post_id:integer body:text
root# rake db:migrate

这样就增加了post和comment的MVC以及相关的测试用例,更有趣的是,增加了post和comment的restful风格的界面 同时可以通过rake routes查看目前支持的restful的url,同时可以启动ror(默认使用3000端口),以及访问http://127.0.0.1:3000/posts/

root# rails s 

修改界面逻辑

  • 增加post与comment之间的关联,命令太多了,直接上asciinema
  • 修改相关的router和view,在post页面展现comments,继续上asciinema
  • 修改controller,每次提交comment之后重定向到post页面,修改comment的create函数

完整的示例

Bitbucket