rails 中止!不知道如何构建任务 'task_name'

rails aborted! Don't know how to build task 'task_name'

我正在创建一个快速的一次性任务:

require 'yaml'

task generate_permissions_yaml: :environment do
  permissions = []

  Permission.order(:title).each do |permission|
    permissions << {
      title: permission.title,
      code: permission.code,
      description: permission.description
    }
  end

  puts permissions.to_yaml
end

当我 运行 它与 rails generate_permissions_yaml 时,我得到了这个错误:

rails aborted!
Don't know how to build task 'generate_permissions_yaml' (see --tasks)
/bundle/gems/railties-5.0.2/lib/rails/commands/rake_proxy.rb:14:in `block in run_rake_task'
/bundle/gems/railties-5.0.2/lib/rails/commands/rake_proxy.rb:11:in `run_rake_task'
/bundle/gems/railties-5.0.2/lib/rails/commands/commands_tasks.rb:51:in `run_command!'
/bundle/gems/railties-5.0.2/lib/rails/commands.rb:18:in `<top (required)>'

事实证明,这是由于我命名文件的方式所致。它应该有一个 .rake 扩展名,而不是 .rb.

我重命名为:

lib/tasks/generate_permissions_yaml.rb

为此:

lib/tasks/generate_permissions_yaml.rake

我在尝试 运行 rails g task generate_permissions_yaml 并看到它生成了一个扩展名为 .rake 的文件后发现了这一点。

对于新手 - 如果您在 rake 命令中使用 space 而不是冒号,这是一个常见的错误。例如,如果您输入:

rake db migrate

而不是:

rake db:migrate

正确的格式有一个冒号,而不是 space