宝典:第十二式 RILAS技巧集锦

本文提供了多个提升Rails应用开发效率和质量的实用建议,如密码及证书的管理、使用常量代替硬编码、保持时间一致性、合理利用ActiveRecord进行数据操作、避免在控制器中堆积过多逻辑、确保关键数据的安全性等。
优快云上看到这些觉得很有道理:
分享下
* 将你的程序所用到的密码和API证书号保存在一个自定义的配置文件中。我使用一个YAML并沿用了database.yml类似的格式。
* 有需要的时候就使用常量。不要重复诸如你的客服邮件地址这类字符串,而是将它们保存在常量中(可以保存在environment.rb或者你自己的配置文件中),然后在整个程序中使用该常量。
* 保持使用UTC时间,这可以使你的程序有更好的一贯性。(不过Rails 2.1的Timezone可提供更好的功能)
* 请勿在一个 Active Record? 数据模型中遍历另一个数据模型。那样的话会产生大量的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事务或者消息服务来处理这个花费时间的任务。Background RB? 也是一个选择. (我使用这种基数来过滤blog中的SPAM).
* 当需要批量发送邮件时,请使用 ar_mailer,而不要在一个Rails的请求回复过程中进行发送。
* 使用 exception_notification插件, munin, monit等工具来监管你的应用程序和服务器。
* 不要吝啬硬件投入,那样的话你因为劣质的备份或便宜的硬件,而很快不得不花钱请人解决那些问题。
* 测试驱动(Test-drive)你的开发
* 使用数据库索引来提供查询速度。Rails仅索引主键,所以你需要根据具体情况设定额外的索引。
* 测量你的代码性能。使用ruby-prof gem 和插件测量你的代码,可以做些小修改便可使你的应用程序成倍提速。
* 将图像相关的代码依赖度减少到最小。如果你的应用程序仅仅需要生成一些缩略图,那么不要将内存浪费在导入巨大的图像库上,相反可以使用mini-magick 或 image_science 等轻量级图像库。
* 避免无节制地渲染小的片段(partials)
* 使用CSS而避免使用行内标签来定义风格
* 不要使用 Active Record? 的 serialize 选项在数据库中保存巨大的对象
* 在数据模型中使用 attr_protected :fieldname 以避免关键数据被通过修改过的表单而改写。(attr_accessible 是更安全的方式,这里解释了为什么
* 使用Ruby类和继承来重构重复的控制器代码
* 使用 Javascrip 技巧将页面行为从页面代码标签中分离出来
* 将能够自给自足的类和模组(module)封装成 plugin 或 Ruby Gems?.
* 尽可能缓存经常被访问的数据库。
* 编写自定义的 Test::Unit assertions 或 rSpec matchers 来帮助调试测试中出现的错误
* 使用 Linux 上的logrotate daemon 来 Rotate the Rails 和 Mongrel 的日志文件
* 需要可靠的备份需要
* 使用 Capistrano 或 Vlad 来自动部署你的网络应用程序
* 尽量保持方法精简。当一个方法长过10行时,请考虑重构它
* 运行 flog 来找出过于复杂的方法和类
* 不必过多使用条件语句。避免使用多层嵌套的if语句,而使用Ruby的case语句和Ruby对象来进行条件处理。
* Ruby 提供强力的元编程功能,不过这个功能很容易被滥用 (比如 eval 和 method_missing).
* 熟悉了解各种流行的插件。 Instead of re-implementing the wheel, save yourself some time by using well tested, popular plugins.
* 在你的login 或 user 控制器中使用 filter_parameter_logging :password, :password_confirmation 来从日志中过滤重要新。负责你的程序日志中将充满用户的密码
欧姆龙FINS(工厂集成网络系统)协议是专为该公司自动化设备间数据交互而设计的网络通信标准。该协议构建于TCP/IP基础之上,允许用户借助常规网络接口执行远程监控、程序编写及信息传输任务。本文档所附的“欧ronFins.zip”压缩包提供了基于C与C++语言开发的FINS协议实现代码库,旨在协助开发人员便捷地建立与欧姆龙可编程逻辑控制器的通信连接。 FINS协议的消息框架由指令头部、地址字段、操作代码及数据区段构成。指令头部用于声明消息类别与长度信息;地址字段明确目标设备所处的网络位置与节点标识;操作代码定义了具体的通信行为,例如数据读取、写入或控制器指令执行;数据区段则承载实际交互的信息内容。 在采用C或C++语言实施FINS协议时,需重点关注以下技术环节: 1. **网络参数设置**:建立与欧姆龙可编程逻辑控制器的通信前,必须获取控制器的网络地址、子网划分参数及路由网关地址,这些配置信息通常记载于设备技术手册或系统设置界面。 2. **通信链路建立**:通过套接字编程技术创建TCP连接至控制器。该过程涉及初始化套接字实例、绑定本地通信端口,并向控制器网络地址发起连接请求。 3. **协议报文构建**:依据操作代码与目标功能构造符合规范的FINS协议数据单元。例如执行输入寄存器读取操作时,需准确配置对应的操作代码与存储器地址参数。 4. **数据格转换**:协议通信过程中需进行二进制数据的编码与解码处理,包括将控制器的位状态信息或数值参数转换为字节序列进行传输,并在接收端执行逆向解析。 5. **异常状况处理**:完善应对通信过程中可能出现的各类异常情况,包括连接建立失败、响应超时及错误状态码返回等问题的处理机制。 6. **数据传输管理**:运用数据发送与接收函数完成信息交换。需注意FINS协议可能涉及数据包的分割传输与重组机制,因单个协议报文可能被拆分为多个TCP数据段进行传送。 7. **响应信息解析**:接收到控制器返回的数据后,需对FINS响应报文进行结构化解析,以确认操作执行状态并提取有效返回数据。 在代码资源包中,通常包含以下组成部分:展示连接建立与数据读写操作的示范程序;实现协议报文构建、传输接收及解析功能的源代码文件;说明库函数调用方与接口规范的指导文档;用于验证功能完整性的测试案例。开发人员可通过研究这些材料掌握如何将FINS协议集成至实际项目中,从而实现与欧姆龙可编程逻辑控制器的高效可靠通信。在工程实践中,还需综合考虑网络环境稳定性、通信速率优化及故障恢复机制等要素,以确保整个控制系统的持续可靠运行。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值