- 将你的程序所用到的密码和API证书号保存在一个自定义的配置文件中。我使用一个YAML并沿用了database.yml类似的格式。
- 有需要的时候就使用常量。不要重复诸如客服邮件地址这类字符串,而是将它们保存在常量中(可以保存在environment.rb或者自定义
的配置文件中),然后在整个程序中使用该常量。
- 尽量使用UTC时间,这可以使应用程序看起来更加一致性。(不过Rails 2.1的Timezone可提供更好的功能)
- 请勿在一个 ActiveRecord
数据模型中遍历其它的数据模型。那样的话会产生大量的SQL查询操作。正确的实现方法是:1)如果多个数据模型已经相互关联,那么可以使用
find(:include)
方法使用预先加载技术,那样的话在一个SQL查询中就可以获取多个数据模型中的数据。2)如果这些数据模型没有被关联,那么你可以写一个自定义的
find,在其中采用select和join来定义跨表查询。这样的话你可能需要你的数据库模型中为非本表的域定于值读取方法以获得正确类型的值。
- 使用二进制字段时请小心。默认情况下,查询数据库会返回所有的字段,包括任何二进制字段中的完整内容。最好是使用 :select
来定义所需要获取的字段,从而减轻系统负荷。
- 要生成周期性报表时,请为报表数据创建一个专用数据表,然后将报告数据缓存到该表中。这样做要比每次现实年度或月度报告是重新产生数据要来的
快得多。
- 创建一个国家列表数据库。默认情况下,Rails使用字符串来选择和罗列国家,这对于数据模式的一致性来说是有害的。而且在生成报告时会产生
问题。
- 避免编写臃肿的控制器(controller),不要将一堆方法塞入controller,如果一个controller的方法超过10个,
那设计上或许有问题了。
- 保持你的控制器和视图(view)尽量简洁,在绝大多数情况下,大部分代码应该放在于数据模型中,而不是控制器或者视图中。
- 不要在session中保存对象。在必要时可以让session中保存数字或者字符串,然后在处理单个请求的时候根据session中的内容
从数据库取回数据。(Rails 2.0 中新的session机制解决了这个问题)
- 避免处理信息量超大的请求回复(response)。遇到要处理大信息量的请求时,你可以将改记录标志为有待处理,然后使用一个cron事务
或者消息服务来处理这个花费时间的任务。BackgroundRB 也是一个选择. (我使用这种基数来过滤blog中的SPAM)。
- 当需要批量发送邮件时,请使用 ar_mailer,而不是在一个Rails的请求回复过程中进行发送。
- 使用 exception_notification插件, munin, monit等工具来监管你的应用程序和服务器。
- 不要吝啬硬件的投入。使用劣质的备份或廉价的硬件会让你常常在服务器的维护上花费上一大笔钱,这得不偿失吧。
- 测试驱动(Test-drive)开发
- 使用数据库索引来提供查询速度。Rails只索引主键,所以需要根据具体情况设定额外的索引。
- 对代码进行性能测试。使用ruby-prof 和插件测试,找到性能瓶颈后做些小修改就能让应用程序成倍提速。
- 将图像相关的代码依赖度减少到最小。如果应用程序仅仅需要生成一些缩略图,那么不要将内存浪费在导入巨大的图像库上,相反可以使用mini-
magick 或 image_science 等轻量级图像库。
- 避免无节制地渲染小的片段(partials)。
- 使用CSS而不是在标签内定义样式。
- 不要使用 ActiveRecord 的 serialize 选项在数据库中存储过大的对象。
- 在数据模型中使用 attr_protected :fieldname
以避免关键数据被通过修改过的表单改写。(attr_accessible 是更安全的方式
- 使用Ruby类和继承来重构重复的控制器代码
- 使用 Javascrip 技巧将页面行为从页面代码标签中分离出来。
- 将能够自给自足的类和模块(module)封装成插件 或 RubyGems。
- 尽可能缓存经常被访问的数据库。
- 编写自定义的 Test::Unit 断言或 RSpec 匹配器有助于调试测试中出现的错误。
- 使用 Linux 上的logrotate 守护进程来轮询 Rails 和 Mongrel 的日志。
- 创建一个可靠的备份系统。
- 使用 Capistrano 或 Vlad 实行自动部署。
- 尽量保持方法精简。请重构超过了10行代码的方法。
- 运行 flog 来找出过于复杂的方法和类。
- 避免过多使用条件语句。使用Ruby的case语句和Ruby对象来进行条件处理,代替那些丑陋的多层嵌套if语句。
- 不要自作聪明。Ruby 提供无比强大的元编程功能,不过这个功能很容易被滥用 (比如 eval 和 method_missing).
- 熟悉了解各种流行的插件。 不要重新发明轮子,使用经过测试的流行插件既省时又省力。
- 在login 或 user 控制器中使用 filter_parameter_logging :password,
:password_confirmation 来从日志中过滤重要。负责你的程序日志中将充满用户的密码。
转自 http://wiki.rubyonrailscn.org/rails/show/Rails开发技巧集锦
分享到:
相关推荐
本资源是一套关于Ruby on Rails开发的全面教程,旨在帮助学习者从入门到精通掌握Ruby on Rails框架的开发技能。教程内容涵盖了Ruby语言基础、Rails框架搭建、Web应用开发、数据库操作、部署与维护等方面的知识。 ...
《Rails之道》按照Rails的各个子系统进行组织编排,分别介绍了Rails的环境、初始过程、配置和日志记录,Rails的分配器、控制器、页面生成和路由,REST、资源和Rails,ActiveRecord的基础、关联、验证和高级技巧,...
本书基于ruby on rails,详细讲述web开发中所涉及的各个主要环节,并且将作者在开发过程中积累的经验和技巧与读者分享。在本书的每个章节中,都有与内容配合的详细实例,帮助读者快速理解并掌握使用ruby on rails...
本书基于ruby on rails,详细讲述web开发中所涉及的各个主要环节,并且将作者在开发过程中积累的经验和技巧与读者分享。在本书的每个章节中,都有与内容配合的详细实例,帮助读者快速理解并掌握使用ruby on rails...
Rails 技巧入门Tips on Rails 使用环境变量在瘦 web 服务器上运行。 您需要完成以下步骤才能使其运行。 创建.env文件,包含以下信息: PORT=5300 (this specific port is needed to work with GitHub oauth)RACK_ENV...
如果在Django项目中能够灵活使用某些方法和技巧的话,它将大大加快软件开发的速度同时避免很多头疼的事。作者在下面列举了几点,这些方法由浅入深,可以帮助任何级别的程序员更加熟练的使用Django。
如果读者已经开发过基于 Rails 的应用,但对其 MVC 间的数据传递还有诸多困惑,那么恭喜您,本文正是要总结梳理 Rails 数据传递的方法和技巧。Ruby on Rails 3(以下统称为 Rails 3)是当前的主要发布版本,本文所述...
如果读者已经开发过基于Rails的应用,但对其MVC间的数据传递还有诸多困惑,那么恭喜您,本文正是要总结梳理Rails数据传递的方法和技巧。RubyonRails3(以下统称为Rails3)是当前的主要发布版本,本文所述及的内容和...
Rails 指南 参考: 地理编码 - 第 272 页 计算 AR 方法 - 第 279 页 枚举(用于草稿、发布、存档) - 第 291 页 使用 Postgres 的 hstore - 第 304 页 传递部分变量 - 第 326 页 目录 配置 对配置文件的更改需要重新...
Ruby技巧,惯用Ruby,重构和最佳实践
然后设置您的位置,并选择一些技巧来继续该网站。 特征 帐户注册,恢复,身份验证,确认和omniauth 电子邮件确认和密码重置 测试和开发使用的发送电子邮件 生产中使用的SendGrid Google Maps和Google Places允许...
您还可以在Open Source Rails上提交有关您的项目的访客博客文章(安装说明,演练指南,技巧/窍门)。 如果质量很高,我们将其合并并在我们的网站上进行介绍。 您可以将博客文章作为github问题撰写(在markdown中)...
当今的自由职业者一直都在发挥自己的才能,他们在自己领域内的专家与完全掌握财务管理技巧之间摇摆不定。 越来越多的人选择成为自由职业者,但是,管理自己的活动仍然很困难。 原因是严重缺乏直观和简单的财务工具...
该项目是通过引导的。... 使用AJAX请求获取数据与API后端集成节点Ruby on Rails 在开发中代理API请求配置代理后出现“无效的主机头”错误手动配置代理配置WebSocket代理在开发中使用HTTPS 在服务器上生成动态<met
本课程涵盖完整的SketchUp插件开发实战内容,以及必要的三维建模理论知识。 Ruby语言的应用不仅仅是Rails, 本课程将带你探索3D建模的领域。 本课程不是:3D模型设计课程,OpenGL课程,Ruby编程技巧课程
面包快车 ... 扎实的数据库设计技巧 模型,视图和控制器关注点之间的良好分离。 测试驱动的开发。 良好的网站设计/用户体验。 改进之处 我想更多地使用javascript来改善用户体验。 我想向管理员主页添加
当我们只有一个倒排索引时,我们希望一切看起来都像一个字符串前缀问题 介绍 Ruby/Rails 集成担架- - 的Flex - - 提示/技巧使用 CURL 和 BASH 的 ELASTICSEARCH 开发工作流程,2013.07 表现Zachary Tong的博客,很...
帮助开发人员找到适合的 API。 您可以对使用过的 API 进行评分、评论并留下提示和技巧。 帮助您轻松查找和使用您的下一个 API! 这是一个使用 PostgreSQL 数据库的 Rails API 和 Backbone.js 应用程序。帮助我们的...
在我的职业生涯中,保持出色的沟通技巧至关重要,如果您愿意,我可以作为技术和非技术之间的翻译; 无论是作为团队负责人充当我的欧洲团队和伦敦总部之间的纽带,还是主持培训课程并与客户冲突进行沟通的酒吧经理,...