我有任务:
desc "Create a team"
task :create_dev_team, [:team_name] do |t, args|
puts "Creating "#{args.team_name}" team under Sub Org ID: 1"
ESP::Team.create(name: #{args.team_name}, sub_organization_id: 1)
end
用于创建团队的 ESP SDK 文档是:
team = ESP::Team.create(名称: "团队名称", sub_organization_id: 6(
当我直接从 irb 调用该线路时,它工作正常,
但是当我打电话:
rake create_dev_team[Team Name] --trace
我得到:
rake aborted!
SyntaxError: /Users/me/dev/my-repo/Rakefile:348: syntax error, unexpected keyword_end
我做错了什么?
您使用语法就像插入字符串一样:
#{args.team_name}
但是没有引用字符串 - 这里没有假定的字符串。这意味着 Ruby 会从#
开始将其视为评论。这反过来意味着代码中没有关闭)
。当解析器找到end
时,这是出乎意料的,因为它仍然认为上下文在方法调用内部,因此它无法完成外部块。
您应该使用:
ESP::Team.create(name: args.team_name, sub_organization_id: 1)
或:
ESP::Team.create(name: "#{args.team_name}", sub_organization_id: 1)
如果您的方法始终返回String
,则应使用前者。在这里,args.team_name
可以返回nil
.但是,您确实应该更早地检查这一点,如果是这样,则任务失败,因为空的团队名称可能会在代码中的其他地方给您带来问题。