【问题标题】:Sharing Models between Rails App and Ruby Script在 Rails 应用程序和 Ruby 脚本之间共享模型
【发布时间】:2017-02-20 18:26:07
【问题描述】:

我的 Rails 应用程序中有一些模型,我还想在 Ruby 脚本中使用它们,它们部署在不同的 VM 上。

我可以创建一个包含这些模型的 gem,然后从两个应用程序中都需要这个 gem。我还可以链接 github 中的存储库,以便使用 Ruby 脚本部署 rails 应用程序中的模型。

我觉得 gem 方法可能有效,但不确定这里的最佳做法是什么。

还有其他选择吗?

谢谢

【问题讨论】:

  • 您能否详细说明如何在独立的 Ruby 脚本中使用模型?您是指仅对象模型,还是还需要与数据库中现有模型进行交互的能力?
  • 主要用于数据库交互。因此,仅公开/使用 API 最有意义。
  • 明白了。我会注意到,根据您的部署配置和特定的脚本要求,将您的 rails 应用程序部署到其他系统并将您的脚本作为 rake 任务实现可能比运行与另一台服务器交互的 ruby​​ 脚本更有意义。

标签: ruby-on-rails ruby


【解决方案1】:

如果您通过 JSON 提供控制器,您将能够通过 Internet 轻松访问它们。

http://localhost:3000/people.json

[
  {"id":1,
   "name":"Eva Smith",
   "age":42,
   "created_at":"2017-02-20T18:52:38.414Z",
   "updated_at":"2017-02-20T18:53:03.112Z",
   "url":"http://localhost:3000/people/1.json"},
  {"id":2,
   "name":"John Smith",
   "age":32,
   "created_at":"2017-02-20T18:52:55.463Z",
   "updated_at":"2017-02-20T18:52:55.463Z",
   "url":"http://localhost:3000/people/2.json"}
]

您可以在 Ruby 端解析它并将其转换为对象数组。

JSON.parse(json_string, object_class: OpenStruct)

【讨论】:

    【解决方案2】:

    我想我会扩展我的答案。现在知道问题是如何在其他脚本中使用服务器上存在的记录,基本上有两种选择。您是在应用程序中执行此操作,还是在外面执行此操作?

    将脚本作为 Rake 任务运行

    将应用的副本加载到相关虚拟机中,并将脚本作为 rake 任务运行。这样做的好处很简单:

    • 脚本和模型逻辑之间更紧密的集成。
    • 当您只需要管理一个代码库时,更改 API 会容易得多。
    • 代码共享(模型方法、助手等)
    • 不依赖额外的 Rails 服务器。

    缺点:

    • 部署过程(gem 安装、启动等)所需的 VM 资源可能不实用。
    • 需要能够在更改服务器的同时将更改部署到 VM。

    使用 API 公开记录

    好处几乎与上述相反。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2012-06-02
      • 1970-01-01
      • 2013-02-15
      • 2011-03-13
      相关资源
      最近更新 更多