【问题标题】:How do I code a rake task that runs the Rails db:migrate task?如何编写运行 Rails db:migrate 任务的 rake 任务?
【发布时间】:2009-03-04 15:53:45
【问题描述】:

我想在我自己的 rake 任务中运行 db:migrate VERSION=0 然后 db:migrate。我对如何做到这一点感到困惑。我需要特殊的需求声明吗?我的 rake 任务将驻留在 Rails 应用程序的 lib/tasks 目录中。谢谢。

【问题讨论】:

    标签: ruby-on-rails rake


    【解决方案1】:

    您的任务是否仅取决于拥有一个干净的数据库?如果是这种情况,那么您可以这样做:

    任务 :my_task => [:environment, 'db:reset']

    【讨论】:

    • 好的,我喜欢这个。有用。这肯定意味着 :environment 任务会加载所有 rails rake 命名空间。
    【解决方案2】:

    编辑:Rake::Task[] 不接受参数,你必须在 ENV 中设置它。此外,您必须重新启用该任务才能多次运行它。

    ENV['VERSION']= '0'
    Rake::Task['db:migrate'].invoke
    Rake::Task['db:migrate'].reenable
    ENV.delete 'VERSION'
    Rake::Task["db:migrate"].invoke
    

    注意:Rake::Task.reenable 需要 Rake 0.8.2 或更高版本。

    【讨论】:

    • 我在我的自定义 rake 任务(位于 lib/tasks 中)中尝试了这个,但它失败了。 ("rake aborted Don't know how to build task db:migrate VERSION=0")
    • Rake::Task[] 接受参数:Rake::Task['my:task'].invoke("123-abc")
    【解决方案3】:

    查看rake db:reset,因为这将完成您正在尝试做的事情。

    要查看所有 rake 任务的作用,请运行 rake -T

    【讨论】:

    • 这很有趣,但并没有真正解释如何在新创建的自定义 rake 任务中运行预构建的 rails 任务。
    • 是的,因为 Pesto 在我之前得到了他的答案,所以我认为向您展示一个更简单的方法不会有什么坏处,即使它没有准确回答问题。
    猜你喜欢
    • 2011-08-04
    • 2010-10-09
    • 2011-04-26
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多