#ruby #sockets
#ruby #сокеты
Вопрос:
Я пытаюсь выяснить, существует ли файл сокета.
IRB
2.1.2 :001 > require 'socket'
=> true
2.1.2 :002 > File.file? '/tmp/mysql.sock'
=> false
2.1.2 :003 > Socket.unix '/tmp/mysql.sock'
=> #<Socket:fd 9>
Как вы можете видеть, файл сокета не является обычным файлом, поэтому Ruby возвращает false .
Любым другим способом (затем с помощью Socket.unix) проверить, существует ли файл сокета?
Ответ №1:
Вам просто нужно использовать File.socket?
метод:
File.file?('/var/run/mysqld/mysqld.sock')
# => false
File.socket?('/var/run/mysqld/mysqld.sock')
# => true
В качестве альтернативы вы можете использовать Pathname
класс:
Pathname.new('/var/run/mysqld/mysqld.sock').socket?
# => true
Комментарии:
1. Черт, так просто (никогда не проверял API), заставляет меня чувствовать себя глупо, спасибо!
Ответ №2:
Существует общий File.exist?
метод, который проверяет, есть ли какой-либо тип записи файловой системы (каталог, файл, символическая ссылка, шаблон, устройство, что угодно …) по указанному пути.
Вы можете использовать его следующим образом:
File.exist?('/var/run/mysqld/mysqld.sock')
# => true
Если вас не волнует тип файла, это, как правило, лучший подход.