【发布时间】:2012-08-25 10:10:13
【问题描述】:
是否可以使用 cron(通过whengem)直接在可挂载引擎模型上运行任务。我认为 cron 将无法从主应用程序启动,因为可挂载引擎应该是隔离的。
我可以在普通的 Rails 应用程序中使用,而且效果很好,但我需要以引擎风格的方式运行任务。
谢谢
【问题讨论】:
标签: ruby-on-rails ruby rails-engines whenever
是否可以使用 cron(通过whengem)直接在可挂载引擎模型上运行任务。我认为 cron 将无法从主应用程序启动,因为可挂载引擎应该是隔离的。
我可以在普通的 Rails 应用程序中使用,而且效果很好,但我需要以引擎风格的方式运行任务。
谢谢
【问题讨论】:
标签: ruby-on-rails ruby rails-engines whenever
您不能单独获取Rails Engine 并直接执行任务,例如 Rake 任务或调用模型。将 Rails 引擎视为迷你 Rails 应用程序。它为挂载的父 Rails App 提供功能和特性。引擎本身是不完整的。将引擎安装到 Rails 应用程序后,它可以访问正确启动和运行所需的所有配置和初始化程序。
已安装引擎的 Rake 任务被继承到父 Rails 应用程序中。执行以下应包括来自引擎的 Rake 任务列表
rake -T
从Rails runner,您也可以执行挂载的Rails Engine 的模型、库等。访问引擎的功能时,您必须使用引擎的命名空间。以下是来自 Rails Guide 的示例,用于从引擎访问模型:
Blorgh::Post.find(1)
【讨论】:
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,但我对其进行了测试,但事实并非如此。只要您适当地命名运行器任务,您的应用程序的每当配置文件将在插件代码中找到适当的任务并能够执行它。如果由于某种原因无法满足您的特定需求,请告诉我。
【讨论】: