我应该使用 Rails 来保持一致性吗? (对于 ETL 项目)

Should I use Rails for consistency? (for ETL project)

上下文

我的问题:我应该在那个 ETL 项目上使用 Rails 吗?

使用它意味着我们可以应用与其他存储库相同的文件夹结构,使用相同的 RSpec 等等。在我看来 Rails 改变了方式 类像哈希法。

与此同时,它似乎给将在 CLI 上 运行 并且可能只包含十几个文件的项目带来了不必要的复杂性。

从我的角度来看,对 ETL 项目使用 Rails 是一种开销。 看一下 dry-rb。使用 https://dry-rb.org/gems/dry-system/0.12/ you can build a small application to process data. Also, there is a gem to build CLI https://dry-rb.org/gems/dry-cli/0.4/

这里是所有干宝石的列表https://dry-rb.org/gems/

Kiba作者来了!这是一个重要的问题,感谢您的提问!

MY QUESTION : Should I use Rails on that ETL project?

默认情况下,我建议从一个单独的项目开始(就像一种 "macro-service" 方法),除非您有重要的东西(不仅仅是 RSpec 和 ENV 设置)要重用来自 Rails 应用程序。

如果应用程序和 ETL 之间存在重要的预期耦合(例如,"scheduled jobs" 你的意思是通过 Sidekiq 触发的作业,对事件做出反应,或者你有 类 在 2 projects),那么你可以将 ETL 放在你的 Rails 应用程序的 etl 子文件夹中,例如,提供一些分离,并留出机会在以后拆分代码,如果它变得更好路径(这是我在某些项目中使用的中间立场)。

如果情况并非如此,并且数据管道预计会变大并独立运行,您可以改为将其拆分到自己的项目中。

Using it means we can apply the same folder structure as the other repos, use RSpec all the same etc.

您也可以使用来自专用 ETL(纯 Ruby)项目的 RSpec 或 minitest,引入 ETL_ENV 的概念(developmenttest, production),使用 dotenv 或类似工具构建您自己的基于 ENV(或基于文件)的配置,并在需要时从那里支持 cron 作业。

纯 Ruby 项目的结构可以像 Rails 应用程序一样,通常没有那么神奇(更明确),这很有帮助。

It also appeared to me that Rails changes the way classes like Hash act.

我实际上建议使用 "explicit" 方法来解决这个问题。今天我更喜欢 "cherry-pick" 我需要的确切扩展名,在每个文件的顶部(如 here 所述)。

最后一句话,您可以像测试您的单个 ETL 组件一样测试 Kiba ETL 管道,我建议您这样做(我将在以后的博客 post 中介绍),因为它有助于轻松移动和升级 Ruby,并且通常可以轻松扩展开发团队(CI + 测试)。

我希望这能为您做出决定提供足够的指导,如果不是这种情况,请发表评论!