Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Ruby: Общие вопросы > ruby-serialport |
Автор: freeneutron 19.7.2011, 11:04 | ||||||||
Установил Ruby под ХР, разобрался с гемами, установил SciTE. Из последнего запускаю команду:
получаю:
потом, запускаю команду:
получаю:
Точно такая же ошибка возникает при установке ruby-usb и ribusb. Подскажите, пожалуйста, в чем проблема? |
Автор: source777 21.7.2011, 19:08 |
Есть gem-пакеты, которые работают через native extensions, т.е. через системные библиотеки .so или .dll. Для установки таких gem-пакетов нужны соответствующие заголовочные файлы. |
Автор: enRai 22.7.2011, 23:34 |
руби в виндоус? как вы его там вообще запустили? (сарказм) |
Автор: freeneutron 23.7.2011, 10:31 | ||||
Да, Виндовс + заглюченная командная строка. Тем не менее, кое-что работает.
С данной проблемой я разобрался. Нужен был devkit и рабочий интерпретатор bat-файлов. Но как-то мало в сети информации на русском о native extensions. И совсем не понятно, брать ответы на такие вопросы как: Какие еще типы расширений используются в Ruby-сообществе? Как обстоят дела с переносом расширений на другую платформу? |
Автор: freeneutron 26.7.2011, 17:13 |
Проблема с предидущей ошибкой вылечилась путем установки второй винды, так как в старой bat-файлы у меня по непонятной причине уже давно не запускаются. Из всех гемов, предназначенных для работы с сериалпортом, у меня установился только serialport. И вот чего мне удалось от этого гема получить. Во-первых, я пытаюсь использовать http://snippets.dzone.com/posts/show/3647. В нем я поправил значения констант SMSC и destination_number, заменил p = GSM.new(:debug => false) на p = GSM.new(:debug => false, :port => 'COM1') Потом запустил скрипт, а он повис. Висел до тех пор, пока я не нажал Ctrl+Break. Продолжив эксперименты, я выяснил, что повисание начинается со строки: cmd("AT") Если перед этой строкой я ставлю return, то повисание проходит, а скрипт, естественно, ни чего не делает. Почему я использовал :port => 'COM1'? ![]() Здесь видно, что этот порт используется системой. Так же видно, что системой используются порты COM20, COM21 и COM22. Когда я использую COM20, COM21 или COM22 вместо COM1, то скрипт заканчивается ошибкой такого плана: serialport.rb:16:in `create': Invalid argument - \\.\COM20 (Errno::EINVAL) Когда я использую имя свободного порта, например COM19, то ошибка такая: serialport.rb:16:in `create': No such file or directory - \\.\COM19 (Errno::ENOENT) В общем очередной тупик, как выходить из которого, я пока что понятия не имею. |