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