由于here中引入的概念,
不推荐使用rails插件中的rake任务,建议使用lib / tasks。怎么解决这个?我可以简单地将插件的任务移动到lib / tasks吗?Rails ::插件只不过是一个 Rails :: Engine,但是因为它已经加载了 它在启动过程中太晚了 没有相同的配置能力 作为一个裸Rails ::引擎。
与Rails相反:: Railtie和 Rails :: Engine,你不应该 继承自Rails :: Plugin。 Rails :: Plugin是自动的 简单地配置为引擎 放置在供应商/插件内。以来 这是你自动完成的 实际上不能宣布一个 你插件里面的Rails :: Engine, 否则会导致相同的情况 要加载两次的文件。这意味着 如果你想发一个引擎作为 gem它不能用作插件和 反之亦然。
除了这个概念上的区别, 唯一的区别 Rails :: Engine和Rails ::插件是 插件自动加载 在插件根目录下输入“init.rb” 在启动过程中。
答案 0 :(得分:9)
我刚刚遇到了同样的问题,只是将所有的vendor / plugin / * / tasks / *。rake文件移到lib / tasks(因为它不存在而不得不创建这个目录)
然后rake rails:update运行正常
答案 1 :(得分:2)
如果您是插件的开发人员,则只需移动
即可my_cool_plugin/tasks
到
my_cool_plugin/lib/tasks