【问题标题】:Rails: rake task with arguments not workingRails:带有参数的rake任务不起作用
【发布时间】:2014-08-24 18:53:03
【问题描述】:

这是我的 rake 任务

namespace :users do
  task :change_role, [:role] => :environment do |t, args|
    puts args.role
  end
end

我这样称呼它:

rake users:change_role["role"] 但我收到此错误no matches found: users:change_role["role"]

【问题讨论】:

  • 你把这个放在哪里?您所写的内容或调用它的方式没有任何问题。
  • 您的 rake 任务文件的文件扩展名为 .rake 吗?
  • @nickcen - 我的文件名为users.rake
  • @meagar - 在app/lib/tasks

标签: ruby-on-rails rake zsh rake-task


【解决方案1】:

在 zsh 等 shell 中使用方括号时需要转义:

rake users:change_role\["role"\]

【讨论】:

  • 不,不是。那是你的 shell 的错误,告诉你没有找到该命令的匹配项。使用 zsh 且没有转义,输出为 zsh: no matches found: users:change_role[ok]。使用 zsh 转义输出是 ok
  • 你是对的,它的 rake 说它找不到命令。在任何情况下,您都需要使用 zsh 转义括号。
  • 啊,其实我觉得你是对的。 "No matches found:" 绝对是 not 是 rake 输出的; rake 会说“不知道如何构建任务......”。
  • 转义是不正确的......我试过这个rake users:change_roles[\"hello\"],但我仍然遇到同样的错误
  • 很棒的电话!完整的错误确实是:zsh: no matches found:
【解决方案2】:

@infused 方式有效,但如果您想永久更改,则只需调用 rake users:change_roles["hello"],将以下内容添加到您的 .zshrc:

alias rake='noglob rake'

【讨论】:

    【解决方案3】:

    您可以将 unsetopt nomatch 添加到您的 .zshrc 文件中,正如 Chad Pytel 在 here 中所描述的那样

    【讨论】:

    • 你这个人,狗。这是大多数人的正确答案,尤其是来自bash 的人。
    【解决方案4】:

    将 rake 任务放在单引号中。

    rake 'users:change_role["role"]'
    

    更多关于https://thoughtbot.com/blog/how-to-use-arguments-in-a-rake-task

    【讨论】:

    • 唯一对我有用的东西(Rails 5.0.7.2)!!
    • 这是一个 zsh prereq。
    • 我们应该询问 OP 他是否在使用 zhs。但这对我有帮助,因为我刚刚切换到 zhs。
    猜你喜欢
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多