Требуется неправильный драгоценный камень с require 'serialport' - PullRequest
0 голосов
/ 09 февраля 2011

Я переместил свой исходный вопрос в конец, так как он больше не относится к проблеме.

Я не могу найти serialport.so, который мне может потребоваться следующим образом:

$ rvmree@global
$ irb
> require 'serialport.so'
=> true

(список драгоценных камней возвращает emtpy)

Обновление:

require 'serialport'

при выполнении в сеансе irb оба требуют возврата true, даже когда я удаляю гем.Таким образом, кажется, что требуется другой драгоценный камень через "require 'serialport" ".Я искал в своей системе любые другие версии этого драгоценного камня безрезультатно.

Как я могу гарантировать, что требуется правильный драгоценный камень?

Обновление:

[Удален список драгоценных камней]

Когда я удаляю все драгоценные камни в глобальном пространстве имен rvm, мне все равно может потребоваться 'serialport' и получить значение true.

Теперь мой вывод списка драгоценных камней полностьюempty и require 'serialport' все еще возвращает true изнутри irb.

Я использую rvm, я опустошил глобальные драгоценные камни и все драгоценные камни в наборе драгоценных камней, которые я использую.Не существует системных гемов с именем, содержащим «serialport», я искал файлы, которые были бы включены в каталог гемов, такие как serialport.o, serialport.so и ничего не нашел.

IЯ в растерянности из-за того, что могло бы отвечать на запрос 'serialport'

require 'serialport.so'

также возвращает true и

sudo find / -name 'serialport.so' -print

ничего не возвращает.

Есть идеи?

Оригинальное сообщение:

Я использую gem serialport (1.0.4).

Документация находится на http://rubydoc.info/gems/serialport/1.0.4/

Вот моя реализация.rb:

require 'rubygems'
require 'serialport'
port_str = "/dev/cu.usbserial" # Serialport mount point
baud_rate = 9600
data_bits = 8
stop_bits = 1
parity = 0

sp = SerialPort.new(port_str, data_bits, stop_bits, baud_rate, parity)

while barcode = sp.gets do
  puts barcode
end

sp.close

При запуске ruby ​​creation.rb я получаю:

implementation.rb:14:in `initialize': wrong number of arguments (5 for 2) (ArgumentError)
from implementation.rb:14:in `open'
from implementation.rb:14

Это странно, поскольку, похоже, нигде не существует метода инициализации (возможно, ruby ​​внутренне называет SerialPort :: new как initialize?).

Рубиновая часть камня выглядит так:

require 'serialport.so'

class SerialPort
   private_class_method(:create)

   # Creates a serial port object.
   #
   # <tt>port</tt> may be a port number
   # or the file name of a defice.
   # The number is portable; so 0 is mapped to "COM1" on Windows,
   # "/dev/ttyS0" on Linux, "/dev/cuaa0" on Mac OS X, etc.
   #
   # <tt>params</tt> can be used to configure the serial port.
   # See SerialPort#set_modem_params for details
   def SerialPort::new(port, *params)
      sp = create(port)
      begin
         sp.set_modem_params(*params) # Calls C extension
      rescue
         sp.close
         raise
      end
      return sp
   end
  # SerialPort::open removed as its the same thing as new() with a block
end

Это работало на днях, и я не могу придумать ничего, что могло бы измениться.

Я тожеПолучите ту же ошибку с гемом ruby-serialport (0.7.0), который выглядит одинаково при быстром взгляде на оба источника.

Пример реализации находится в http://www.sfc.wide.ad.jp/~mitsuya/4U/ruby-serialport-macosx.html

Последний гем (ruby-serialport) находится по адресу http://rubyforge.org/projects/ruby-serialport/ (документация по http://ruby -serialport.rubyforge.org / )

Есть идеи?Спасибо.

1 Ответ

0 голосов
/ 14 февраля 2011

Глядя на $LOAD_PATH из irb, я начал искать в них что-нибудь связанное с последовательным портом.

Вскоре я нашел ~/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/i686-darwin10.6.0/serialport.bundle.После удаления я попытался require 'serialport' и получил ожидаемое LoadError: no such file to load -- serialport, поскольку ранее я удалил гем serialport для отладки этой проблемы.

После gem install serialport мой код снова работает как положено.

Если бы я думал ясно, я бы сделал это в первую очередь и избежал головной боли.Я надеюсь, что это поможет любому с подобной проблемой быстрее отладить его.

...