【问题标题】:Rails 4: stop `rake` from running all rake tasksRails 4:停止“rake”运行所有 rake 任务
【发布时间】:2014-09-23 18:23:14
【问题描述】:

开发人员有权删除数据库但不能重新创建它。在处理rake 任务时,他不小心运行了整个rake 套件,其中包括破坏开发数据库,​​但没有重新创建和填充它的适当权限。

如何确保不再发生这种情况? Rails 应用程序中是否有某种方式可以覆盖正在运行的rake,以便它不会执行一堆未指定的任务?

开发人员正在寻找任务列表,并认为运行 rake 会提供该列表,类似于运行 rails 本身会发出指令。

我知道rake 有一个 binstub,但我真的不知道如果我把里面的东西弄乱了会发生什么。

对于这种情况有什么好的解决办法吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rake


    【解决方案1】:

    设置默认任务? IIRC,在namespace 块之外:

    task :default => "something_that_doesnt_destroy_the_world"
    

    【讨论】:

    • 所以如果我有 lib/tasks/default.rake: task default: do puts "..." end 它会在执行 rake 时运行?
    • @DanL 我不知道,我会假设它需要一个字符串命名空间/任务,但也许它也需要块。
    • 对我来说这听起来“不错”,但我需要在新环境中进行测试,以验证它实际上会覆盖默认的 rake 命令。如果是这样,我会接受这个答案!
    【解决方案2】:

    记下 Dave 的回答和另一个 SO 问题(无法再次找到链接),以下是如何覆盖 Rails 4 中的默认 rake 任务。

    # lib/tasks/default.rake (name is not important)
    namespace :override do
      task :default do
        puts "This is now the default rake task executed via 'rake'"
      end
    end
    
    # Remove default task and switch to above (still in same file)
    task(:default).clear.enhance ["override:default"]
    

    在终点站:

    $ rake
    /lib/tasks/default.rake: this is now the default 'rake' task
    

    如果有“更清洁”或更“传统”的 Rails 方式,欢迎任何人大声疾呼。这是我能找到的“最干净”的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-23
      • 2013-09-06
      • 1970-01-01
      • 2011-08-04
      • 2012-11-15
      • 2010-10-09
      • 1970-01-01
      • 2015-04-15
      相关资源
      最近更新 更多