【问题标题】:How to run rake task?如何运行 rake 任务?
【发布时间】:2015-06-11 04:28:18
【问题描述】:

我有一个现有的 .rake 文件。它曾经有一项任务,我在现有的 rake 文件中添加了一项任务。

但是当我尝试运行时,它会抛出一个错误:

rake aborted!
Don't know how to build task ___ 

abc.rake文件:

namespace abcd
  namespace abcde
    task pqr do
      ------------------
    end

    task mno do ( new task which I added)
     ---------------------
    end
  end
end

但是当我使用命令时:rake abcd:abcde:mno -- 上面显示错误

所以我使用了 rake -T -A ,我可以看到 rake 任务 abcd:abcde:pqr 但看不到另一个。

我是 Rails 新手。请帮帮我。

提前致谢。

【问题讨论】:

  • 如果您的 rake 任务有误,将无法找到。确保您的 rake 任务是正确的。首先删除task mno 的内容,或者只在其中添加一个简单的puts,然后运行rake -T。看看它是否会出现。
  • 我试过了。没用。仍然缺少 mno 任务。请告诉我如何导入 rake 任务?
  • 你需要重启你的spring server吗?
  • 我重启了服务器。但还是同样的错误
  • 请参考document

标签: ruby-on-rails ruby rake


【解决方案1】:

这里就是你想要的.....

在 lib/tasks 中创建文件 abcd.rake

在 abcd.rake 文件中编写以下代码

namespace :abcd do
  namespace :abcde do

     task :pqr do
       puts 'Inside PQR'
     end

     task :new_added_task do
       puts 'Inside New Added Task'
     end

     task :mno => [:new_added_task]  do
       puts 'Inside Mno'
     end

   end
end

现在试试下面的命令....

rake abcd:abcde:pqr           #  Output => Inside PQR 

rake abcd:abcde:mno           #  Output => Inside New Added Task
                              #            Inside Mno

rake abcd:abcde:new_added_task  # Output => Inside New Added Task

查看所有任务运行命令

rake -T -A 

它将显示所有任务以及您自己创建的任务...

rake abcd:abcde:mno                                 # 
rake abcd:abcde:new_added_task                      # 
rake abcd:abcde:pqr                                 # 
.............

【讨论】:

    【解决方案2】:

    第 1 步: 您是否尝试过在命令前加上“bundle exec”? 例如:~$ bundle exec rake abcd:abcde:mno

    如果您的 gem 文件中有多个版本,您通常需要运行 bundle exec 以使用当前项目目录的 gem 运行命令。

    (可选)第 2 步: 如果失败,请尝试指定这样的环境 例如:~$ bundle exec rake abcd:abcde:mno RAILS_ENV=development

    【讨论】:

      【解决方案3】:

      这是给你的测试代码:

      在../lib/tasks/abcde.rake下创建一个文件abcde.rake

      namespace :abcde do
        desc 'pqr pqr pqr pqr'
        task :pqr => :environment do
          puts 'pqr'
        end
        desc 'mno mno mno mno'
        task :mno => :environment do
           puts 'mno'
        end
      end
      

      然后运行这个命令

      rake -T
      

      上述命令的输出是:

      rake abcde:mno                                   # mno mno mno mno
      rake abcde:pqr                                   # pqr pqr pqr pqr
      

      运行

      rake abcde:mno #mno
      

      【讨论】:

      • 嗨..我遵循了确切的过程。但是命令的输出不显示 rake abcde:mno。感谢您的回复。
      • 请在您的项目中尝试此代码,有时我们会遗漏一个小问题。在回答你之前,我已经在我的项目中创建并运行了它。
      【解决方案4】:

      在 Rails 6.x 中,您必须使用 rails 而不是 rake。 上面user400617的例子

      namespace :abcd do
        namespace :abcde do
      
           task :pqr do
             puts 'Inside PQR'
           end
      
           task :new_added_task do
             puts 'Inside New Added Task'
           end
      
           task :mno => [:new_added_task]  do
             puts 'Inside Mno'
           end
      
         end
      end
      

      会这样运行

      rails abcd:abcde:pqr           #  Output => Inside PQR 
      
      rails abcd:abcde:mno           #  Output => Inside New Added Task
                                    #            Inside Mno
      
      rails abcd:abcde:new_added_task  # Output => Inside New Added Task
      

      我花了一段时间才弄明白。

      【讨论】:

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