Rails 有没有人用 Rails 做过封闭信息系统产品开发的呢?来谈谈经验?

Chorder · 2018年07月02日 · 最后由 luikore 回复于 2018年07月14日 · 2718 次阅读

可能听名字有点绕,但原谅我才疏学浅实在不知道该怎么概括。

举个例子吧,就像类似于路由器、上网行为管理、安全邮件网关这一类的设备,通常都是在操作系统之上做一些开发,并将整体系统封闭安装到类似刀片服务器这样的设备中,安装部署在企业的机房里。

想知道有没有人尝试过用 Rails 作为框架来开发这样的产品?

因为据我所知一般嵌入式设备都用 lua、perl 这样的轻量级的脚本语言来开发,但上述提到的这一类设备又不同于嵌入式设备,前者通常硬件配置比较高,后者通常需要裁剪内核,也就不一定能够支持 ruby 了。

最近碰巧要独立上手这样的项目,开发一个类似这样的产品,之前的版本采用 php,LAMP 四件套开发,到我这里,由于觉得之前的项目代码有点凌乱,加上整理了一遍原先产品的思路觉得可以围绕着模型展开开发 (之前 PHP 版本并没有用到 MVC),于是第一时间想到了用 Rails 来重构一遍。

可以围绕着这个需求探讨交流下经验呢?

项目近期就要正式启动了,过程中遇到的坑和经验我也会不定期过来补充和大家分享的。😄


20180715 补充

之前已经完成了产品的第一个能用的版本了,但是暂时还没有进行实际的部署。来记录下这一个阶段的开发过程吧。

本次项目后台用户管理方面用了 Devise 做支撑,在这基础之上拓展了几个模型字段,也借此机会强化了对 Devise 的使用,真的是个很不错的轮子!(强烈建议 Rails 把 Devise 吸收到框架内部)

之前对 Devise 的使用仅仅停留在对视图的修改上,这次因为需要实现一个记录用户登录日志的功能,需要复写一些控制器,于是翻看了一遍它的源码,了解了它对登录过程的一些处理机制。顺便记录了一下 Devise 的简单使用过程,方便后面跟我一样的菜鸟参考:Rails Devise 基础案例

项目中还有一个部分是用到 API 和客户端通信的,于是学习了一下 Rails API 的构建。参考了这一篇文章:使用 Rails 构建 API 实践

真的是极其方便!

还有 https 部署的问题。

目前采用的是 Apache 做前置服务器,使用 ProxyPass 选项代理到本机的 3000 端口。

单纯的 Web 管理界面?用 Rails 我怕路由器都启动不起来。这个时候你应该转投:https://ruby-china.org/topics/31921

chunlea 回复

看 LZ 说的是 『类似刀片服务器这样的设备』,应该是硬件性能可以满足,但是系统是特别定制的。场景略小众,估计玩过的人不多,看上去难点在 Ruby 环境的准备上,这步成功了基本就等于成功 95% 了

不过这种场景下迭代应该不会很频繁吧?用 Rails 会不会有点重了,它的内存占用对这类设备来说可能是一个不能忽略的开销

3 楼 已删除
4 楼 已删除

这种东西,建议用 go 做。

相对 PHP,go 是静态编译的,所以不会凌乱。第二,部署很方便,只需要编译 arm 支持的版本就可以了。

老东家以前用 ror 做过安全漏洞扫描器的 web 端(硬件是一台订制的主机),虽然能做,不过还是不建议。

kimmg 回复

不建议的理由是?

rails 不是万能的,这种嵌入系统有数据库吗?

Chorder 回复

理由大概有三:

  1. 部署难度 大部分的企业网管,内网流量统计设备,管理设备,是不连接外网的,那么独立部署,和 gem 安装的问题就会被放大,失去了 rails 的优势,cap 也好,mina 也好,在这种环境下都不好施展拳脚。
  2. 性能 rails 吃内存,并发大,这不用说了。做网关设备开发的话,除非你的接口设计做的很好,不然这块的性能问题让人头大。特别是订制设备的硬件性能,不一定像服务器那样方便扩展。
  3. 兼容性 同 2,有些订制机器,或者自己裁剪过内核的其他发行版 linux,一些 gem 的兼容性可能会有问题。
11 楼 已删除
12 楼 已删除

我司做的是类似虚拟化管理平台的东西,也是卖的硬件 + 软件组合,基于 ESXi,用 Rails 写的。

现在虚拟化普及以后,基本不用担心平台性能问题,都是 x64 虚拟机一把梭,内核用发行版 Stock 就行,啥都不用干,还能享受发行版自己的安全补丁。

我们还有个类似小型路由器网关一样的虚拟机,里面跑的 Ubuntu 8.04 Stock……

设备强力可以上 Rails, 不强力也可以用 Ruby 但建议 Sinatra + Sequel

15 楼 已删除
16 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号