Ruby Dir.mkdir Использование - PullRequest
1 голос
/ 20 ноября 2011

Я довольно новичок в ruby ​​и у меня есть очень простой скрипт ruby, имеющий следующую цель:

  1. Чтение строк из файла
  2. Доступ к экземпляру jira с использованием gem jira4r
  3. Запрос экземпляра jira для проблемы (ей)
  4. Создание каталога с использованием ключа проблемы и сводной информации о проблеме

Я пришел к выводу, что после Dir.Команда mkdir не принимает объект, который я передаю в качестве аргумента.

Выводы:

  1. Если Dir.mkdir передана строка, # {chompline}, из моегоСоздание каталога в текстовом файле выполнено правильно.

  2. Если Dir.mkdir передается строка, состоящая из Issue.key и Issue.Summary, он задыхается со следующей ошибкой:

. / ReadFile.rb: 29: в `mkdir ': нет такого файла или каталога - (Errno :: ENOENT) из ./readFile.rb:29

  1. На основе точки #1 и # 2, это должно быть что-то в строке, которую я создаю из ключа проблемы и сводки.

У меня естьследующие теории / вопросы:

  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

Ответы [ 2 ]

1 голос
/ 20 ноября 2011

keyPlusSummary - это строка, поэтому она имеет правильный тип. В чем может быть проблема - это косые черты в строке. Как и mkdir в UNIX, Dir.mkdir не будет создавать для вас родительские каталоги, он будет создавать только один каталог. Если ключ + summary содержит символ '/', он будет считан как многоуровневый каталог. Вам нужно либо экранировать '/', либо (лучше), использовать FileUtils.mkdir_p, либо (лучше) выполнить очистку, чтобы заменить '' на '_', и удалить специальные символы, которые усложняют использование каталога:)

Кроме того, вашему коду не нужно иметь интерполяции, которые он делает:

#!/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
1 голос
/ 20 ноября 2011

Это строка, но вы не говорите нам, что в ней.

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

Вы делаете строку "имя-директории дружественным"?

Я бы не использовал бы сводку о проблемах JIRA в качестве имени каталога; ИМО только проекта / вопроса # было бы достаточно. Если вы действительно используете сводку, сделайте ее удобной для работы с каталогами, удалив все не алфавитно-цифровые символы и заменив пробелы подчеркиванием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...