Ruby 请建议 rails 里数据管理

hbm · December 04, 2023 · Last by ericguo replied at December 10, 2023 · 771 hits

后台用 python 获取和处理数据,会用到一些机器学习的库,所以基于 python。

打算用 rails 全栈来做 web.

请问大家怎么建议 python/rails 之间的数据管理:

  1. 只用一个 rails 数据库,Python 子系统通过 API 写入,读取数据
  2. 只用一个 rails 数据库,Python 子系统直接通过 sql 写入,读取数据
  3. python 子系统用自己的数据库,基于 sqlalchemy, 写一个任务周期性把新数据导入 rails

2) 可能不好,请问 1/3 大家如何选择和建议。谢谢!

Rails 可以同时连接多个数据库。如果 python 子系统的数据没什么兼容问题,可以不导入直接读。

建议全部用 Python 除非你的公司很大,需要建立各种山头 😁

Reply to Rei

python 数据如果通过 sqlalchemry 定义,在 rails 里要通过 activeRecord 再定义一次?数据库更改,迁移的时候要注意同步?

Reply to huobazi

django 虽然也不错,但感觉 rails 还是更成熟易用一些....

Reply to hbm

Rails 里面不用定义,ActiveRecord 是动态读取数据库里面的表信息。你需要为外部数据库的表创建 model,并且设置连接信息,不需要 migration。

搜了个例子 https://stackoverflow.com/a/35492504

你可以跟 python 项目约定好命名规则,id 用 id 整数递增,字段名用下划线,这样就可以很大程度兼容 AR 的约定。然后给 Rails 项目开一个只读权限账号,避免 Rails 项目不小心写入。

Reply to Rei

这个方案很好,非常感谢 Rei!

Reply to hbm

甚至 AR 的约定也不是必须的,现在 Rails 7.1 支持组合主键,数据库的单独 ID 主键本来就是可以配置的,字段名下划线也不是必须的。还有个 readonly 方法可以强制 AR 为只读(不过还是建议开一个只读帐号,省的后面扯皮麻烦)

module Edoc2
  class ProjectInfo < ApplicationRecord
    establish_connection :edoc2v5 unless Rails.env.test?
    self.table_name = "eform_thape_projectinfo"

    def readonly?
      true
    end

  end
end

这套就是 Rails 抢地盘生存的吃饭法门啊!

You need to Sign in before reply, if you don't have an account, please Sign up first.