最近在跟老师做一个项目,目的应该是要模仿连接 postgres 的 gem 包 pg 来为华为的数据库写一个连接 gem 包 老师给了我源码地址https://github.com/ged/ruby-pg,让我去读一读源码,要知道那一部分是干嘛的,但是我看里面的各种代码很乱,完全不知道有什么联系 各位可以给一点建议吗,如何去学习这个东西,还需要哪些知识 哦对了,我现在还是大二,最近也才刚接触 ruby 谢谢各位了
确定是模仿这个 gem 再“写”一个 gem 包?而不是“用”这个 gem 包写个工具 ??
要真是前者,我很想知道你老师对工作难度的评估是怎样的。即使对工作几年的人来讲,重写一个偏底层 gem 也够喝一壶的了。对一个大二刚学 ruby 没多久的人,这个需求实在是强人所难
ruby-pg 的核心在 c 语言扩展里(ext 目录),模仿它写一个 gem 确实是很有难度。所以同一楼疑问,确定老师不是让你用 ruby-pg 写个工具连接到华为的数据库吗?🤨
因为华为的数据库是基于 postgres 进行改编的,但是使用 pg 这个 gem 包对华为数据库进行连接是会出问题的,按照我的理解应该是模仿 postgres 的包写一个 gem 包来进行连接,以便于对华为的 openguass 数据库进行兼容,按照老师的说法是到时候的工作大部分可以参考 pg 这个 gem 包的源码。 因为如果不是再写一个 gem 包的话好像没必要去读源码?应该是只要知道怎么使用就好了
我只知道 ruby-pg 能够连接数据库,还不知道怎么使用它来写一个新的工具? 因为老师让我去读源码,我就感觉应该是要自己写一个,不然应该只要知道里面的方法怎么使用就好了,应该不用去读源码的。 至于难度,已经有心理准备了,因为之前的学长做的就是这个数据库的内核优化,函数兼容,也是比较难的
找你学长,或者看 opengauss 的文档,看哪些接口被修改了,就直接在 Gem 源码里找这些函数去修改。
另外,直接找你老师要现成的用 pg 跑不通的例子,debug 到里面看哪里有问题。先进 Ruby 部分,然后进 C 部分。
pg
楼主加油,希望研究出来后,反馈给社区,教一下大家怎么实现的
如果你初学的话,或许可以这样: 先尝试着自己写一个简单的 gem,Google "ruby create gem" ,这样你可以理解 ruby-pg 源码的结构。 再尝试着去了解 ruby 如何与 C 交互,Google "ruby C extension" ,这样对 ext 文件夹里的内容,你也会有初步了解。
根据你描述的情况,我建议从结果导向,研究 pg 这个 gem 连华为数据库为什么报错?或者 华为数据库修改了什么?然后再回去翻源码,如果是小 bug 的话,或许简单调整下就可以解决问题。
你需要看这个文档了解 gem 的目录结构 https://guides.rubygems.org/
特别是 https://guides.rubygems.org/gems-with-extensions/ 关于怎么调用 C 的库
搞懂 gem 的结构后看 ruby-pg 是怎么做的,然后看华为 db 跟 postgres 有什么不同,它们有没有提供 C 库,有的话用华为的 C 库替换 ruby-pg 的 C 库部分。
如果华为 db 是基于 postgres 开发的话,应该可以基于 ruby-pg fork 一份来修改。
按 fork 的思路可以是:
源码研究可以用 xmind 做思维导图,梳理文件结构和代码逻辑
gem 结构和 c ext 楼上都有回复了