让 gem 代 运行 成为抽成任务?

Make a gem generation run a rake task?

我制作了一个使用 rails 生成器的 gem。

它创建某些文件,包括数据库迁移。

有什么方法可以自动运行 'rake db:migrate' 任务吗?用户 运行 安装后。

或者有没有办法以 'Run db:migrate' y/n 的形式创建 'ask'?

是的,肯定有。您只想将该行代码包含在所述生成器的安装方法中。 (在下面的示例中,MyEngine 和 myengine 代表您的引擎名称)

class InstallGenerator < Rails::Generators::Base
    def install
        rake 'db:migrate'
    end
end

但是,您需要在安装生成器中做更多的事情,而不仅仅是 运行ning rake db:migrate。生成器的目的是让您在安装这个坏男孩时让生活更轻松。 为了将您的引擎正确安装到应用程序中,需要首先执行一些必需的任务。首先 运行 捆绑安装,其次安装你的引擎,第三次安装你的迁移,最后你会想要 运行 rake db:migrate。总而言之,您引擎的安装生成器最终会看起来更像这样:

class InstallGenerator < Rails::Generators::Base
    def install
        run 'bundle install'
        route "mount MyEngine::Engine => '/myengine'
        rake 'myengine:install:migrations'
        rake 'db:migrate'
    end
end