【问题标题】:options for running an rb file every hour from a rails app从 Rails 应用程序每小时运行 rb 文件的选项
【发布时间】:2021-06-08 19:14:41
【问题描述】:

我想要一个 .rb 文件,其中包含我所有的 scraper /bot 相关代码,然后我想知道将它放在我的 rails 应用程序的哪个位置,以便某些 rails 服务激活它并使用输出创建 db 记录。

我制作了一个 scraper,它只是在 craigslist 上运行并提取与我的参数匹配的数据。在我的机器上,我只有一个 cron 选项卡作业,它会根据我指定的时间执行 .rb 文件。

我想做的是触发我的机器人进入世界,然后在我的 rails 应用程序中创建一条记录,以便当用户访问我的页面时。

他们可以浏览我的机器人制作的记录。所以我想我希望我的机器人为我制作 RESTful 资源。我该怎么做?

我考虑过只制作我的应用程序,然后在我的机器上维护机器人,然后向我的 rails 应用程序发送一个 http 请求,该应用程序将在 VPS 上,但我觉得可能有一种更 ruby​​ 式的方式来做它。

我听说过服务对象这个词......

【问题讨论】:

  • 尝试澄清我的问题.... 我有一个遵循 MVC 结构的 rails 应用程序。我有一些资源,其中一种资源,即我们称它为 Dogs。我还有一个带有各种宝石的普通 ole ruby​​ 文件,这样我就可以去掠夺 craigslist....每隔一段时间就归档一次。
  • 这样的? vikingcodeschool.com/posts/… 你想将结果存储在你的数据库中。然后服务对象或模型本身可以完成这项工作,每次获得结果时,您都可以调用它并将数据存储在数据库中。我做对了吗?
  • 使用github.com/javan/whenever定期运行特定脚本。

标签: ruby-on-rails


【解决方案1】:

不幸的是,我只能从理论上回答您的问题,因为它缺少一些示例代码以及您想要实现的目标和方式的详细信息。

服务对象是纯 ruby​​ 对象,位于例如在 /lib 文件夹中

This page 包含一个例子:

class RegisterUser
  def initialize(user)
    @user = user
  end
  def execute
    return nil unless @user.save
    send_welcome_email
    notify_slack
    if @user.admin?
      log_new_admin
    else
      log_new_user
    end
    @user
  end
  # private methods
end

上面的服务对象将用于为新用户或现有用户创建记录。

来自外部的请求可能是对您应用内的一个 RESTful API 的 API 调用,该 API 接收来自外部的发布请求以生成或修改数据库中的数据。

除了如何构建 API 之外还有很多教程,例如Tutorial 1Tutorial 2

【讨论】:

    【解决方案2】:

    我认为 Active Jobs 最适合这个。您可以在 rails>app>services 中添加所有 .rb 文件并创建一个活动作业来执行该任务。活动作业用于在后台运行任何东西。您可以使用 sidekiq/rabbitmq 进行调度,并且可以轻松地与活动作业集成。

    【讨论】:

    • 好的,谢谢,这是我正在寻找的反馈类型。我将深入研究并报告我发现的内容以及我是否使用它来实施解决方案。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2014-06-03
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    相关资源
    最近更新 更多