【问题标题】:Mountable engine with cron (whenever gem)带有 cron 的可安装引擎(无论何时 gem)
【发布时间】:2012-08-25 10:10:13
【问题描述】:

是否可以使用 cron(通过whengem)直接在可挂载引擎模型上运行任务。我认为 cron 将无法从主应用程序启动,因为可挂载引擎应该是隔离的。

我可以在普通的 Rails 应用程序中使用,而且效果很好,但我需要以引擎风格的方式运行任务。

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby rails-engines whenever


    【解决方案1】:

    您不能单独获取Rails Engine 并直接执行任务,例如 Rake 任务或调用模型。将 Rails 引擎视为迷你 Rails 应用程序。它为挂载的父 Rails App 提供功能和特性。引擎本身是不完整的。将引擎安装到 Rails 应用程序后,它可以访问正确启动和运行所需的所有配置和初始化程序。

    已安装引擎的 Rake 任务被继承到父 Rails 应用程序中。执行以下应包括来自引擎的 Rake 任务列表

    rake -T
    

    从Rails runner,您也可以执行挂载的Rails Engine 的模型、库等。访问引擎的功能时,您必须使用引擎的命名空间。以下是来自 Rails Guide 的示例,用于从引擎访问模型:

    Blorgh::Post.find(1)
    

    【讨论】:

    • 我对轨道引擎和可挂载引擎还比较陌生,所以这是一个学习曲线。因此,从您提到的内容来看,它向我展示了我可以直接在 Engine 模型上运行 cron 但需要从主机应用程序开始执行,这让我明白了一点。被孤立了,我认为可安装的引擎就是这样,黑匣子,但从你提到的情况来看,我试了一下,它对我来说真的很好用。我会将这个问题标记为正确,因为它已经正确解决了我的 Rails 引擎问题,并让我对引擎有了更多的了解。
    【解决方案2】:

    Rails 的设计者绝对不打算让它成为可能。每当依赖于 rails 的运行器脚本时,可挂载插件不支持该脚本(有充分的理由——没有应用程序可以使用运行器运行)。也许可以通过配置何时使用不同的 ruby​​ 执行器(rails 控制台、IRB 等)来找到执行代码的其他方法,但这可能会产生意想不到的结果,因为它不在应用程序的上下文中,所以你有没有配置或环境。

    但是,您声明:The cron I think would not be able to start from the main app since mountable engines are supposed to be isolated,但我对其进行了测试,但事实并非如此。只要您适当地命名运行器任务,您的应用程序的每当配置文件将在插件代码中找到适当的任务并能够执行它。如果由于某种原因无法满足您的特定需求,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      相关资源
      最近更新 更多