2011-11-20 89 views
1

我非常新的Ruby和有有以下目的非常简单的Ruby脚本:红宝石Dir.mkdir使用

  1. 文件
  2. 访问JIRA实例使用jira4r宝石
  3. 查询的读线对于问题(S)
  4. 使用问题和关键问题,总结创建一个目录JIRA实例

,我得出的结论有些锡后kering Dir.mkdir命令不接受我将它作为参数传递的对象。

发现:

  1. 如果Dir.mkdir传递线路,#{} chompline,从我的文本文件目录的创建正确执行。

  2. 如果Dir.mkdir传递由issue.key的字符串和issue.summary它与下面的错误扼流圈:

./readFile.rb:29:in`的mkdir':无这样的文件或目录 - 从./readFile.rb:29

  1. 基于点#1和#2(错误:: ENOENT) ,它必须有一些关于我的问题的关键和总结创建的字符串。

我有以下理论/问题:

  1. 是 “#{} keyPlusSummary” 正确的对象类型传递到的mkdir作为参数? 我相信它是字符串,但也许我错误地假设。

来源:

#!/usr/bin/env ruby 
require 'rubygems' 
require 'jira4r' 
require 'FileUtils' 
jira = Jira4R::JiraTool.new(2, "http://jira.somejirainstance.com") 
baseurl = jira.getServerInfo().baseUrl 
puts "Base URL: " + baseurl , "\n" 
jira.login("someUser", "somePassword") 



file = File.new("awkOutput.txt", "r") 
while (line = file.gets) 
    chompline = "#{line}".chomp! 
    issue = jira.getIssue("#{chompline}") 
    keyPlusSummary = "#{issue.key}"+"#{issue.summary}" 
    puts keyPlusSummary 
    Dir.mkdir "#{keyPlusSummary}" 
end 
file.close 
+0

'system(“mkdir#{keyPlusSummary.to_s}”)''是否工作? – LanguagesNamedAfterCofee

+0

system(“mkdir#{keyPlusSummary.to_s}”)为每个issue.key + issue.summary创建多个目录。例如,如果字符串是“a b”,上面将创建两个dirs:a和b。我想我需要正确地逃避空间。是的? – blackberryoctopus

+0

尝试'系统(“mkdir#{keyPlusSummary.to_s.gsub('','\')}”)' – LanguagesNamedAfterCofee

回答

1

这是一个字符串,但你不告诉我们什么是它。

# More canonical, both in var naming, and there's 
# no need for concatenation in this case. 
dir_name = "#{issue.key}#{issue.summary}" 

你是否让字符串“目录名称友好”?

我会不是使用JIRA问题摘要作为目录名称;国际海事组织只是项目/问题#就足够了。如果你使用使用摘要,通过删除非字母数字的任何内容并用下划线替换空格使其成为目录友好的。

+1

是的,该字符串应该是目录友好的。 下面是issue.key + issue.summary中第一个字符串的示例。 FDB-1814混合翻译器/渲染器 1.空格是合法的字符,但你建议替换空格。我是否需要使用\与shell相似的方式将它们转义出来? 我打算添加gsub!到代码中,以便替换不友好的字符。 由于我们的问题命名模式,在这种情况下使用jira摘要应该没问题。 – blackberryoctopus

+2

@blackberryoctopus哦,请不要使用'/'作为单个目录名称的一部分:(这就是为什么你的调用失败,因为它把它当作一个路径分隔符来处理,就像它应该是的一样。 JIRA组件来指定问题层次结构而不是嵌入摘要中吗? –

+0

Hi Dave, 好的,我可以在字符串上做一个gsub!并替换'/',这似乎是合理的,并且不会出现问题向前移动 I don不明白你的意思是什么:“JIRA组件指定问题层次结构而不是嵌入摘要?” – blackberryoctopus

1

keyPlusSummary是一个字符串,所以它是正确的类型。可能的问题是字符串中的斜杠。与UNIX中的mkdir一样,Dir.mkdir不会为您创建父目录,它只会创建单个目录。如果key + summary包含'/',那么它会将其作为多级目录进行读取。你需要使用FileUtils.mkdir_p或者(最好)使用FileUtils.mkdir_p或者(最好)使用'_'来代替'',并且删除使用目录更难的特殊字符:)

As另外,你的代码不需要插入它:

#!/usr/bin/env ruby 
require 'rubygems' 
require 'jira4r' 
require 'FileUtils' 
jira = Jira4R::JiraTool.new(2, "http://jira.somejirainstance.com") 
baseurl = jira.getServerInfo().baseUrl 
puts "Base URL: #{baseurl}\n" #use it here! 
jira.login("someUser", "somePassword") 



File.new("awkOutput.txt", "r") do |file| #using the block form to ensure you close the file 
    while (line = file.gets) 
    chompline = line.chomp! #line is already a string, no need to interpolate 
    issue = jira.getIssue(chompline) #line is already a string, no need 
    keyPlusSummary = "#{issue.key}#{issue.summary}" #already interpolating, no need to add 
    puts keyPlusSummary 
    Dir.mkdir keyPlusSummary #already a string 
    end 
end 
+0

嗨吉姆 我实际上希望'/'是目录名称的一部分。它应该是有效的字符。有没有一种自动创建字符串的便利方法? – blackberryoctopus

+0

@blackberryoctopus:根据操作系统/文件系统的不同,在路径名中不允许使用多个字符,因为它们有特殊含义。斜线就是其中之一。 Ruby不能“逃避”那些,因为它不知道该如何处理它。另外,斜线可以表示它的确切含义:路径分隔符。因此,您应该使用'str.gsub'执行转义。 –