Ruby Dir.mkdir Использование
Я довольно новичок в ruby и у меня есть очень простой скрипт ruby, имеющий следующую цель:
- Читать строки файла
- Доступ к экземпляру jira с использованием гема jira4r
- Запрос экземпляра jira для вопроса (ов)
- Создайте каталог, используя ключ проблемы и сводку проблемы
После некоторых попыток я пришел к выводу, что команда Dir.mkdir не принимает объект, который я передаю в качестве аргумента.
Выводы:
Если Dir.mkdir передается строка, #{chompline}, из моего каталога текстового файла, выполнить правильно.
Если Dir.mkdir передается строка, состоящая из Issue.key и Issue.Summary, он захлебывается следующей ошибкой:
./readFile.rb:29:in `mkdir ': Нет такого файла или каталога - (Errno::ENOENT) из./readFile.rb:29
- Основываясь на пунктах № 1 и № 2, это должно быть что-то в строке, которую я создаю из ключа проблемы и резюме.
У меня есть следующие теории / вопросы:
- Является ли "#{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 ответа
Это строка, но вы не говорите нам, что в ней.
# More canonical, both in var naming, and there's
# no need for concatenation in this case.
dir_name = "#{issue.key}#{issue.summary}"
Вы делаете строку "имя-каталога, дружественное"?
Я бы не использовал сводку JIRA в качестве имени каталога; ИМО только проекта / вопроса # было бы достаточно. Если вы используете сводку, сделайте ее удобной для работы с каталогами, удалив все не алфавитно-цифровые символы и заменив пробелы подчеркиванием.
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