免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3199 | 回复: 5
打印 上一主题 下一主题

翻译《应用Rails进行敏捷Web开发(第四版)》(一) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-02 09:32 |只看该作者 |倒序浏览
翻译《应用Rails进行敏捷Web开发(第四版)》(一)





深入理解Rails



P257 -- P270



目录结构

使用rails new my_app新建项目



-config.ru

用于配置Rack WebServer Interface,也可以创建Rails Metal应用,或在该Rails项目中使用Rails Middlewares.详见rails guide




        Rails很有趣的一点是她的组织形式。从一个开发者的视角,你的大部分时间是放在高层次的模块上,例如Active Record和Action View。另外有个叫Rails的组建,但是她位于其他的组件之下,默默的协调其他组建,让她们合作无间。同时,这个底层结构很少会被使用到,本节末会提到组件。



-Gemfile

用于定制你的Rails项目的依赖,这种依赖也包括数据库,web服务器甚至用于部署的脚本

技术上来讲,该文件是被你的应用所用,你可以在 config/boot.rb和config/application.rb中找到对于Bundler的调用


-Rakefile

定义一些任务包括:运行测试,生成文档,抽取当前项目结构等。在命令行中可以输入以下命令:

rake -–tasks 查看命令清单

rake –describe task 更完整的关于task的使用介绍



-README





关于文档



Rails提供了doc:app 的Rake任务来生成文档到doc/下。另外doc:rails命令可以生成当前版本的Rails的文档,doc:guides可以提供可用的指导文档,在你生成该指导文档前,你需要在Gemfile添加 gem RedCloth 一行,保存后运行 bundle install

通过 rake -T doc 命令,可以看到Rails提供的其他文档关联任务



关于提供的库文件

lib文件夹中的代码与model view controller并不是严丝合缝的结合。例如,如果你打算写一个用来生成PDF的,这些数据直接从controller直接发送到浏览器(通过 send_data方法),用于生成PDF的代码只需要放在lib目录下。

Lib目录也是个适用放置用于models view controllers分享的代码之处。也许你需要一个验证身份证号码的库,这种计算不属于m v c应放置在lib中

你可以自由在lib下传减子文件夹来归类组织相关的方法。例如lib/pdf_stuff 可以用于放置生成清单,生成文档和pdf的库等

在老的Rails版本里,lib目录被自动加载,如今这是一个需要明确开启才可被加载

需要在config/application.rb中加入一行

config.autoload_paths += %w(#{Rails.root}/lib)

lib目录下的代码都可以直接访问,如果这些文件包含类,模块并且这些文件的命名是其包含类或模块的名称的小写形式,Rails就可以自动加载这些文件,比如,我们的生成PDF文件是lib/pdf_stuff/receipt.rb. 只要我们的类叫 PdfStuff::Receipt. Rails可以自动加载它

其他的情况,需要使用require机制。在lib目录下的文件,可以直接通过名称require.例如lib/easter.rb可以通过 require 'easter'包含

lib/shipping/airmail.rb需要require “shipping/airmail”



关于Rake Tasks

lib目录下有tasks的空目录,这里你可以写自己的Rake任务。

这里有一个简单的例子,Rails提供了一个Rake任务可以用来向你展示最后一次执行的migration,然而我们也许需要一个用于展示所有migration的任务


Ruby代码
  1. 1.namespace :db do  
  2. 2.    desc "Prints the migrated versions"  
  3. 3.  
  4. 4.    task :schema_migrations => :environment do  
  5. 5.        puts ActiveRecord::Base.connection.select_values(   
  6. 6.        'select version from schema_migrations order by version' )   
  7. 7.    end  
  8. 8.end  
  9. namespace :db do
  10.     desc "Prints the migrated versions"

  11.     task :schema_migrations => :environment do
  12.         puts ActiveRecord::Base.connection.select_values(
  13.         'select version from schema_migrations order by version' )
  14.     end
  15. end  
复制代码
保存该文件,以.rake结尾。这里我们命名db_schema_migrations.rake

我们可以通过

>rake db:schema_migrations 来运行



关于日志(赞略详见264页)



关于静态文件

貌似3.1之后都放在 app/assets/之下

包括stylesheets javascript 和一些静态网页




关于Scripts

关于rails命令,第一个参数决定了rails要执行的功能

benchmarker

生成你的应用中的 一个或多个方法的性能数

console

允许你和你的Rails应用中的方法交互

dbconsole

允许你直接通过命令行和数据库交互

destroy

移除通过generate命令自动生成的文件

generate

一个代码生成器工具。可以生成controllers,mailers,models,scaffolds,webservices.你也 可以在Rails网站上下载其他的生成器。不带参数的命令可以查看特定的生成器的使用方法

例如rails generate migration

new

生成Rails应用的代码

plugin

帮你安装和管理插件(扩展Rails功能)

profiler

描述运行时一个URI请求处理的简介信息

runner

在Web上下文之外运行一个项目内的方法。

server

启动web服务器



关于临时文件

在tmp文件夹重,你可一找到一些子目录关于缓存内容,sessions,sockets等。通常这些文件会被Rails自动清理。除非错误运行,你可能需要到这里查看并删除旧文件



关于第三方代码

vendor目录是第三方代码存放出。这些代码有两种来源

1>Rails安装插件到vendor/plugins中

2>你可以在vendor文件夹中安装Rails和所有的依赖。

如果你想使用系统版本的gems,可以删除vendor/cache目录



关于配置文件

config目录包含了配置Rails的文件

运行你的应用前,Rails加载并执行 config/enviroment.rb和config/application.rb.这两个文件建立的标准环境加载包含了一下文件夹(相对与你的项目根目录)

-app/controllers 目录和子目录

-app/models 目录和所有子目录(命名以下划线或小写字母开头)

-vendor目录和每个plugin下插件子目录中的lib目录
  1. -app, app/helpers, app/mails, app/services, config, 和lib
复制代码
以上目录一旦存在就会被加到加载路径中

另外,在enviroments目录下,你可以根据不同环境(开发,测试,产品)做不同的配置
  1. depot> rails server -e development

  2. depot> rails server -e test

  3. depot> rails server -e production
复制代码
你也可以创建自己的环境。在数据库配置文件增加一个单元,在config/enviroments重创建新的文件

详见rake doc:guides



命名约定

Rails的菜鸟们也许会对Rails对命名的自动处理感到困惑。例如在调用模型类Person时,Rails会到数据库中找到名为people的表。

这里被Rails使用的默认配置都可以通过再配置重写



驼峰标识,下划线,复数形式

ruby中约定,变量名使用小写字母,并且字母间用下划线分割;类和模块中无下划线,每个单词的第一个字母为大写(驼峰标识)。例如变量order_status,类名LineItem

Rails通过两种方式处理这种命名约定。首先,她假设数据库表的名称,比如变量名称,使用小写字母和下划线连接单词。她也假设表名称总是复数,这导致表名称如orders和third_parties

从另一方面讲,Rails假设文件名都是用下划线分割的小写字母组成



如图可见该约定规则:




在一般的ruby代码中在引用类和模块之前你需要使用require关键字来包含Ruby源文件。由于Rails知道文件名与类名间的关系,因而require常常是不需要的。



模块化Controllers

目前位置,我们的controllers都存在与app/controllers文件夹下。有时结构化该文件夹会带来更多便利。例如我们可以放于app/controllers/admin/,名为book_controller.rb。即,controller名的最后一部分可以解析为一个文件名如name_controller.rb,前面部分可以从app/controllers导航到该文件所在的目录.

设想我们的程序有两组controllers(admin/xxx和content/xxx)两个组都定义了book controller.即app/controller文件夹下的admin和content子目录里都有book_controller.rb文件,并且这两个controller文件里都有名为BookController的类。

处理这种问题,Rails假设app/controller的子目录里的controllers都是定义在Ruby的modules(模块)中的。因此,在admin中的类应该这样声明


Ruby代码
  1. 1.class Admin::BookController < ActionController::Base   
  2. 2.# ...   
  3. 3.end  
  4. class Admin::BookController < ActionController::Base
  5. # ...
  6. end  
复制代码
同理,在Content模块:


Ruby代码
  1. 1.class Content::BookController < ActionController::Base   
  2. 2.# ...   
  3. 3.end  
  4. class Content::BookController < ActionController::Base
  5. # ...
  6. end  
复制代码
这些controllers的模板也应该在app/views的子文件夹中,如下相应的请求:

http://my.app/admin/book/edit/1234 可以请求到

app/views/admin/book/edit.html.erb

以上工作 你可以通过命令

myapp> rails generate controller Admin::Book action1 action2 ...

论坛徽章:
0
2 [报告]
发表于 2011-11-07 22:37 |只看该作者
楼主

论坛徽章:
0
3 [报告]
发表于 2011-11-08 17:57 |只看该作者
不错啊。

论坛徽章:
0
4 [报告]
发表于 2011-11-09 17:44 |只看该作者
:wink:

论坛徽章:
0
5 [报告]
发表于 2011-11-09 17:45 |只看该作者

论坛徽章:
0
6 [报告]
发表于 2011-11-09 19:06 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP