`
xxj
  • 浏览: 430067 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DM & Merb 快速体验

阅读更多
发觉她们很有趣,今天开始学习并使用。

http://datamapper.org

Why DataMapper?
http://datamapper.org/why.html

一:通过irb快速体验DM

安装
gem sources -a http://gems.datamapper.org
sudo gem install data_objects do_mysql dm-core dm-more


打开irb开始试用DM

require 'rubygems'
gem 'dm-core'
require 'data_mapper'

#我们把日志打到控制台里,方面看
DataMapper::Logger.new(STDOUT, 0)

#连接MYSQL
DataMapper.setup(:default,'mysql://root:password@localhost:3306/test_dev')

#新建model:post
class Post
  #DM 0.9 改变了之前继承DM的类方式,通过mixin DataMapper::Resource 来实现类似于AR:Base中的操作
  include DataMapper::Resource
  
  #最新的版本中需要指定主键
  #serial=>true 表示该建为自动增长 
  property :id, Integer,:serial=>true
  
  #新建其他的几个字段测试下
  #更多内容查看这个:http://datamapper.org/docs/properties.html
  property :title,String
  property :body,Text
  property :created_at,DateTime

   
end

#建表,auto_migrate! 会先drop现有的表,然后再重新创建
Post.auto_migrate!

Post.create :title=>'Post title',:body=>'Body goes here'

#这些和AR没有太巨大的差距了 


不过她的查询很有趣

exhibitions = Exibition.all(:run_time.gt => 2, :run_time.lt => 5)
# => SQL conditions: 'run_time > 1 AND run_time < 5'


更多可以查看这里:
http://datamapper.org/docs/find.html

二:快速体验Merb
http://merbivore.com/

安装:
 sudo gem install merb merb-more merb-plugins


快速体验
新建一个空项目
merb-gen app demo
cd demo


通过merb-gen generators可以当当前查看所有的generator,自带的有

引用

Installed Generators
  Rubygems: controller, migration, model, part_controller, resource, resource_controller


看到后台生成的目录结构和rails有很大的相似,继续,修改config/init.rb
#新增如下的依赖包,0.9 默认是不包含Helper的这些方法,手工加入,下面我们会用到,譬如link_to
dependencies "merb_helpers","merb-assets"
#orm 我们使用datamapper,这个在init.rb中有,去掉注释即可,Merb也可以使用AR
use_orm :datamapper
#去掉rspec的注释
use_test :rspec


再执行下
merb-gen


会生成一个database.yml.example
mv config/database.yml.example config/database.yml


修改,我这里使用的是mysql,这个和rails一样,没啥特殊的地方
# This is a sample database file for the DataMapper ORM
development: &defaults
  # These are the settings for repository :default
  adapter:  mysql
  database: test_dev
  username: root
  password: password
  host:     localhost
  socket:   /var/run/mysqld/mysqld.sock


socket的值不知道,可以通过mysql_config查看
mysql_config --socket


简单的建立个model,和rails一样也有resource的脚手架
merb-gen resource user id:integer login:string email:string created_at:date_time


会生成mode,controller,views,helper以及rspec的代码。

修改mode/users.rb将id修改为主键

class User
  include DataMapper::Resource
  
  property :id, Integer, :serial=>true
  #.....
end


和上面的auto_migrate!一样,也有rake相应的建表task
rake -T | grep 'rake dm'

会看到所有的tasks

其中
rake dm:db:automigrate  和上面的一样,先drop再create
rake dm:db:autoupgrade  仅仅添加新增的字段,不会drop表,也不会删除字段

执行
rake dm:db:automigrate


下一步 修改route.rb
Merb::Router.prepare do |r|
  # RESTful routes
  #增加
  r.resources :users
  #.....
  r.default_routes
  
  # Change this for your home page to be available at /
  #修改默认的页面转向users的index
  r.match('/').to(:controller => 'users', :action =>'index')
end   


安装mongrel
sudo gem install mongrel


启动
merb


默认端口为4000,浏览下http://localhost:4000/,增删改查也应该就出来了

和我们在rails中一样,也可以传递不同的参数,譬如
merb -p 3000 -e production


等等,默认启动了mongrel.更多查看
merb --help


安装thin
sudo gem install thin


以thin启动
merb -a thin


启动多个cluster结点

merb -a thin -c 2


停止
merb -K all


TODO:
 RSpec
分享到:
评论
11 楼 yy77 2008-06-10  
尝试安装的时候发现DM无法在win32的平台上通过gem安装?
10 楼 Raecoo 2008-06-08  
期待Ruby 1.9和近来听起来都很牛叉的VM的发布,或许会有好的解决方案
9 楼 neodoxy 2008-06-07  
Raecoo 写道
neodoxy 写道
Raecoo 写道
neodoxy 写道
DM很慢

能否提供点实际测试描述

Merb应用如果用DM做ORM层,那瓶颈就是DM
就如同Rails的瓶颈大多在ActiveRecord
横向比较,DM相对于ActiveRecord的优势并不明显,所以Merb并不比Rails快很多
据说,DM0.9版会有很高的性能提升,我用的时候是0.3版本

貌似看到国外有篇文章做了相关的测试,Merb的性能比Rails好像要高60%多
但测试的逻辑还是显的比较简陋,并不能完全说明问题

抛开ORM层来说的确是快了,但是加上ORM曾就不乐观了
我用ruby处理一些网络游戏周边应用,比如用户管理/点卡充值
这里就简单说一下用户管理,比如我要从数据库的login记录里分析使用多个帐号的用户,就要搜索一定用户的登录ip和mac以及这些ip和mac上的其他用户,然后再搜索这些其他用户的关联帐号来保证结果的准确性
对于有几十万用户,上亿条登录记录的数据表来说,瓶颈完全在数据库上,我分别用Merb和Rails实现,可惜Merb没有给我带来惊喜,而他的精简反而使我要做更多额外工作
可能是我的水平不到家吧.或者这个例子特殊,但这也算是个实例,抛砖引玉
8 楼 t0uch 2008-06-06  
还是要靠VM来提高啊,ruby自己的速度上不去,就是一个慢字
MegLev这东西不知道和YARV相比谁比较猛
7 楼 robbin 2008-06-05  
Rails的routes解析是非常耗时的,用method_missing搞,还调用堆栈特别深。不过话说回来,自己在template里面直接拼URL,不那么优雅的去用他的routes的话,就可以绕过这个性能瓶颈。

merb官方网站声称比Rails快20%-40%,我觉得这个性能优势比我想像的要小的太多,总之,不管怎么搞法,性能问题的根源目前还是ruby解析器的问题。所以等ruby1.9.1发布正式版才是性能问题解决之道。
6 楼 Raecoo 2008-06-05  
neodoxy 写道
Raecoo 写道
neodoxy 写道
DM很慢

能否提供点实际测试描述

Merb应用如果用DM做ORM层,那瓶颈就是DM
就如同Rails的瓶颈大多在ActiveRecord
横向比较,DM相对于ActiveRecord的优势并不明显,所以Merb并不比Rails快很多
据说,DM0.9版会有很高的性能提升,我用的时候是0.3版本

貌似看到国外有篇文章做了相关的测试,Merb的性能比Rails好像要高60%多
但测试的逻辑还是显的比较简陋,并不能完全说明问题
5 楼 Raecoo 2008-06-05  
Merb在Template方面做了比较多的工作,解析效果也比Rails好些
最简单的例子就是很多的Helper方法去除了对Routes的解析而直接生成HTML

Merb的Routes也比较有特点,非常灵活
4 楼 robbin 2008-06-05  
由于ruby解析器性能太差,所以抛开数据库端的访问瓶颈来看的话,Rails真正慢还是慢在template的生成这一块,并不在ActiveRecord上面,特别是如果充分利用对象缓存的话。

Merb比较特殊的一点是他是线程安全的,所以可以以ruby的多线程方式去跑,即启动一个mongrel实例,里面有很多线程并发处理web请求,比Rails的纯进程模式肯定要节省很多内存,能够支持的并发量也要大一些。
3 楼 neodoxy 2008-06-05  
Raecoo 写道
neodoxy 写道
DM很慢

能否提供点实际测试描述

Merb应用如果用DM做ORM层,那瓶颈就是DM
就如同Rails的瓶颈大多在ActiveRecord
横向比较,DM相对于ActiveRecord的优势并不明显,所以Merb并不比Rails快很多
据说,DM0.9版会有很高的性能提升,我用的时候是0.3版本
2 楼 Raecoo 2008-06-05  
neodoxy 写道
DM很慢

能否提供点实际测试描述
1 楼 neodoxy 2008-06-05  
DM很慢,所以Merb的整体性能比Rails高不了多少
Merb可以看成一个拆分得更细的Rails,不使用的功能不导入,以此来提高性能
但是往往使用频率很高的功能被排除在core之外,还是不得不去用那些扩展

Merb的code比Rails的好看倒是真的
另外关注Waves

相关推荐

    practical_intro_merb.pdf

    描述:这是一份关于Merb框架的实用介绍,旨在为开发者提供一个深入了解Merb——一款轻量级、可扩展且快速的Ruby Web框架的途径。 知识点: 一、Merb框架简介 Merb是Ruby语言中的一个Web应用框架,其设计目标在于...

    crack, 真正简单的JSON和XML解析,从Merb和 Rails.zip

    crack, 真正简单的JSON和XML解析,从Merb和 Rails 裂纹 真正简单的JSON和XML解析,从Merb和 Rails 。 XML解析器从Merb中提取出来,JSON解析器从 Rails 中剥离。 我没有信用,只是打包供大家使用,方便使用。兼容性...

    Rails,Sinatra,Merb,DataMapper等的分页库-Ruby开发

    will_paginate will_paginate是一个分页库,与Ruby on Rails,Sinatra,Hanami :: View,Merb,DataMapper和Sequel集成。 安装:##用于Rails 3 +,Sinatra和Merb的Gemfile gem'will_paginate','〜&gt; will_paginate ...

    crack:从Merb和Rails中复制的真正简单的JSON和XML解析

    裂缝 从Merb和Rails中复制的真正简单的JSON和XML解析。 从Merb提取XML解析器,从Rails提取JSON解析器。 我不负任何责任,只是将它们包装起来供所有人使用和轻松使用。兼容性Ruby1.8.7 ruby 1.9+(与时间解析相关的3...

    delishlist.com:与Capistrano一起部署的中型Sinatra网站(从Merb重写)

    与Capistrano一起部署的中型Sinatra(从Merb重写)。 将链接标记在或上的wishlist ,更好地演示。 不隶属于Yahoo! Inc.是“ Delicious”商标的所有者,也不具有Pinboard。 开发人员 bundle createdb delishlist_...

    will_paginate:用于Rails,Sinatra,Merb,DataMapper等的分页库

    will_paginate will_paginate是一个分页库,与Ruby on Rails,Sinatra,Hanami :: View,Merb,DataMapper和Sequel集成。 安装: ## Gemfile for Rails 3+, Sinatra, and Merbgem 'will_paginate' , '~&gt; 3.1.0' 有关...

    Ruby语言令人喜爱的十大特点

    这种特性在项目初期特别有用,因为它允许快速迭代和更改,而无需担心编译时的类型检查。开发者可以更自由地实验和重构代码。 2. 鸭子类型(Duck Typing):Ruby 中的鸭子类型强调“如果它走起路来像鸭子,叫起来也...

    wikimedia-mobile:维基媒体在 Merb 中的移动站点

    维基移动 这是 2010 年由维基媒体的优秀人士带给您的移动项目。 该项目的目标是让各种不同语言的各种不同移动设备都能访问维基百科。 基本原则是修改维基百科页面,使其非常适合大量设备。 最初,XHTML/WebKit 手机...

    Ruby-willpaginate一个分页库可与RubyonRailsSinatraMerbDataMapper和Sequel集成

    它提供了简单、灵活的接口,帮助开发者在处理大量数据时进行高效的分页显示,从而改善用户体验并优化服务器性能。 **Ruby on Rails** 是一个流行的全栈 web 应用框架,`will_paginate` 与其集成后,可以轻松地在 ...

    (ruby 1.9 开发)Rango

    - **代码生成器**:提供了生成器来帮助快速搭建项目结构,但并不强制要求特定的项目结构。 - **代码热加载**:通过使用 shotgun 实现代码热加载,便于开发时调试。 - **Bundler 支持**:兼容 Bundler,使得依赖管理...

    jQuery实战中文版+源码

    jQuery是目前最受欢迎的JavaScript/Ajax库之一,能用最少的代码实现最多的功能。...Yehuda Katz 著名Web技术专家,jQuery开发团队的核心成员,Merb等开源项目的贡献者。他还维护着热门网站VisualjQuery.com。

    Node.js 入门手册:那些最流行的 Web 开发框架.docx

    2. archetype:利用Node.js构建的Web框架,提供了强大的基础结构来快速搭建应用。 3. aries:基于注解的MVC框架,简化了模型、视图和控制器的组织和操作。 4. blueprint:基于Node.js和Mongoose的中间件及MVC路由...

    github是什么?.docx

    github 提供了图形化的界面,方便开发者快速创建、编辑和管理代码仓库。 github 的使用非常广泛,包括许多知名项目都使用了 Git,例如 Rubinius 和 Merb 等。同时,github 也可以被诸如 Capistrano 和 Vlad the ...

    freego-sprinkle:我们的(旧)洒食谱

    我们使用这些脚本对基于 Ubuntu Linux 的服务器进行快速且可重复的初始设置。 将安装所需的软件包并复制一些示例配置文件(但不会自动启用)。 这是针对 Ubuntu 12.04 LTS 的,其他基于 debian 的系统可能需要进行...

    Ruby on Rails 3 Tutorial

    - **合并Merb框架**:引入了Merb的一些优秀特性,如更灵活的路由系统等。 - **精简依赖**:移除了一些不再使用的组件,使得整体更加轻量级。 ##### 三、学习资源与实践指南 - **《Ruby on Rails 3 教程》**:由...

    node.js入门手册:那些最流行的web开发框架 (1).docx

    **Geddy** 是一个可扩展的 Web 开发框架,类似于 Merb、Rails、Pylons 和 Django。它提供了一系列工具来帮助开发者构建高性能的 Web 应用程序。 #### 二十二、GenJi **GenJi** 是一个简单的微框架,专为 Node.js ...

    微生物的重金属代谢研究进展

    MerA是一种还原酶,能将Hg2+还原成元素汞(Hg0),而MerB则是将有机汞分解成无机汞离子。 重金属污染对生态系统和人类健康的影响是多方面的。重金属能够替代细胞内有功能的金属离子,与重要蛋白质结合,导致蛋白质和...

Global site tag (gtag.js) - Google Analytics