2011-11-20 87 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'執行轉義。 –