【问题标题】:How to run a rake task by command line in rails如何在 Rails 中通过命令行运行 rake 任务
【发布时间】:2013-10-09 03:13:08
【问题描述】:

我在一个名为file_locker_task.rake的文件中定义了如下的rake任务

namespace :myspace do
   task :process => :environment do
      FileLocker.lock_files   
   end
end

如何从命令行执行这个 rake 任务? 我试过了:

rake myspace:processrake process 但两者都抛出如下错误:

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

【问题讨论】:

  • 你把那个文件放在哪里了?
  • 也应该有扩展名.rake
  • 抱歉扩展名是 rake
  • Rails 在lib/tasks 中提取任务,该文件是否位于该文件夹中?

标签: ruby-on-rails ruby rake


【解决方案1】:
  1. 从 Rails 主目录运行 rake -T -A 以查看 rake 知道的所有任务。 rake 必须在该列表中才能运行它。
  2. 默认情况下,在 Rails 应用程序中,rake 在lib/tasks 目录及其子目录中查找.rake 文件。检查那个。 (我怀疑这是问题所在。)

【讨论】:

  • 它将任务显示为 rake file_locker_task:process 我该如何运行它?
  • 是的。在这种情况下,您将完全按照它的拼写方式运行它,前面带有 bundle exec:bundle exec rake file_locker_task:process
  • Rails 不关心你把 .rake 文件放在哪里。你的意思是 Rake 只看起来像 lib/tasks?顺便说一句,请参阅下面的答案)
  • @hawk,我不同意。 Rails 将 rake 配置为搜索 lib/tasks。所有自定义 Rails 应用程序 rake 任务应该放在那里,因为这是其他开发人员期望找到它们的地方。在rake + rails 上看到很多any tutorial
  • @Dogweather Rails 不执行任何操作来运行任务,只有 rake 可以运行 Rakefile,您的第二个答案不正确。 Rails 只查看lib/tasks Rails 是一个框架而不是一个任务运行器。
【解决方案2】:

根据docs

任何 ruby​​ 文件(包括其他 rakefile)都可以包含在标准 Ruby require 命令中。

-

其他 rake 文件(文件扩展名为“.rake”)可以放在项目顶层的 rakelib 目录中(即包含主 Rakefile 的同一目录)。此外,rails 项目可能在 lib/tasks 目录中包含其他 rake 文件。

【讨论】:

    猜你喜欢
    • 2011-08-04
    • 2016-11-03
    • 1970-01-01
    • 2021-02-19
    • 2011-03-04
    • 2010-10-09
    • 2016-06-03
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多