是否可以使用cron(通过when gem)直接在可安装的引擎模型上运行任务。我认为cron无法从主应用程序启动,因为可安装的引擎应该被隔离。
我能够在普通的rails应用程序中使用它并且它运行良好但我需要以引擎方式运行任务。
由于
答案 0 :(得分:3)
您不能单独使用Rails Engine并直接执行任务,例如Rake任务或调用模型。将Rails引擎视为迷你Rails应用程序。它为挂载的父Rails应用程序提供功能和特性。引擎本身就不完整了。将引擎安装到Rails应用程序后,它可以访问启动和正常运行所需的所有配置和初始化程序。
已安装引擎的Rake任务将继承到父Rails应用程序中。执行以下操作应包括引擎中的Rake Tasks列表
rake -T
从Rails runner,您也可以执行已安装的Rails Engine的模型,库等。访问Engine的功能时,必须使用Engine的命名空间。以下是Rails Guide中用于从引擎访问模型的示例:
Blorgh::Post.find(1)
答案 1 :(得分:0)
Rails的设计者绝对不打算这样做。每当依赖rails的runner脚本时,可安装的插件不支持(出于好的理由 - 没有应用程序可以与runner一起运行)。也许通过配置何时使用不同的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
,但我测试了它,但事实并非如此。只要您适当地命名转轮任务,只要配置文件在插件代码中找到适当的任务并且能够执行它,您的应用程序就可以了。如果由于某种原因不能满足您的特殊需求,请告诉我。