最近老大让用 RAILS 做一个后台服务器,很简单的下载 EXE,PDF 文件供 PC 软件在线更新,看了下 RAILS 的 GEM,发现 Grape 似乎是专业做这个的,但是看了半天没看太明白怎么用的,有高手可以进来指点一下么?我也想把这个帖子留下来直到我把这个功能完全实现。感谢各位大神赐教
目前看了下例程,有几点疑惑 1.API 文件夹必须在 APP 文件夹之下么? 2.api.rb 是干嘛的啊,里面用了 mount 这个去指定很多 Module 中的 Class,这个是啥意思呢? 3.在 Module 中 desc 干嘛的啊? 大神不喜勿喷哈,诚心求教,或者告诉在那个页面可以看到相关资料也可以
@bluesky0318 Grape 的问题完全可以在 Grape Github 上找到答案。
但另外,如果是附件管理的 API 到可以看看 Kod Explorer
在线更新是有专门的解决方案的。
如果不想用现成解决方案的话,有个非常简单的方案: 你可以直接把文件放在 S3 上,在 S3 bucket 根目录放一个 METADATA 文件,记录一下版本等需要告知客户端的信息。按照一定的文件夹结构存放后,客户端根据 METADATA 下载对应需要更新的文件即可。
楼上有的说用 Grape、有的说用云服务,那么问题来了,到底应该使用那种解决方案呢?
这个当然还是要根据你的业务场景来推算了。你需要提供 PC 软件在线更新的服务,那有多大的量呢?一个文件会不会有 20G?如果单个文件真有这么大,云服务无疑省时省力。但根据我的推算并没有。
因为你的老大知道 rails,说明他是搞技术的,让你用 http 协议走文件传输,而不是其他文件传输专有的协议,说明这并不是一个大项目,文件的总量也不会太多,不会上 PB 的大小。从你提问的方式来看,你知道用 GEM,但却不会用 Grape,说明你刚做 ruby 不满一年,经验尚浅,你老大放心让你做说明这个项目不是太大,而且是让你拿来练手,顶多是给内部员工或者客户的软件提供简单的文件传输功能。以此推断,我感觉不太需要用云服务,所以安安心心就用 send_file 吧。
再回答你的问题
其实这些都很简单呢,在 github 上多看就 OK,你说 github 老打不开?详情咨询 13 楼
#16 楼 @MrPasserby 是的,一直是做 PC 端开发的,看 ruby 看了 1 年多吧,当然没有具体的项目练习,所以不是很熟练,文件不是很大,就是 EXE,自定义的 OCE,PDF,EXCEL,WORD 文件,一般都是几 M 而已,老大在台北,所以他无法指导我,而且你也晓得一般到高级经理写代码也少,更多的是需要你自己发挥。 感谢回复的问题,github 打得开的,呵呵,只是看着项目太多,都无从着手,恩,在慢慢学习 grape 这个 GEM 的一些特性。如果有做过的兄弟也可以进来谈谈
目前想实现的功能其实就很简单了,就是用 Grape 这个建构 API,PC 端访问 API,下载对应的文件到本地地就好,之所以要用 grape 倒也不是说老大非要用这个 gem,我是看好多推荐这个,而且从经验来看,能用框架或者说别人做好的东西就用吧,非要自己写那不是回到原始社会也不是 rails 的初衷。 目前看倒 grape 的 wiki 中有说明怎么写 API,慢慢实践中
#20 楼 @jimrokliu 我用 grape 搭建了 API,用 curl 命令对于数据库的增,删,查,改,更新都实现了,然后我自己定义了一个函数去 send_file,但是提示说在 class product < Grape::API 这个类里面找到不 send_file 这个函数,请问如何处理啊,是不是要 require 某个文件过来呢?
#21 楼 @bluesky0318 确实没有这个函数,官方给出的方法是 https://github.com/intridea/grape#sending-raw-or-no-data,一个意思
大家都知道的几点:
那么问题来了:Rails API 哪家强?
至于 rails jbuilder 什么的,看个人喜好了。Grape 总体来说还是很不错的,你可以在 Github 上读读 Ruby-China 的源代码,看这里的 Grape 是怎么写的,然后去实现自己那套。
我也正在读:)
#21 楼 @bluesky0318 send_file 是 rack 提供的功能,rails 倒是能用,如果在 grape 里用的话,我得研究一下。