2011-02-09 7 views
0

원본 질문을 더 이상 완전히 그 문제와 관련이 없으므로 원래 질문을 아래쪽으로 옮겼습니다. 나는이 같은 요구 할 수 있어요 serialport.so를 찾을 수 없습니다입니다'serialport'가 필요하다는 잘못된 보석이 필요합니다.

:

$ [email protected] 
$ irb 
> require 'serialport.so' 
=> true 

(보석 목록 emtpy 반환)

업데이트 :

require 'serialport' 

irb 세션에서 실행되는 경우, 둘 다 보석을 제거하더라도 true를 반환해야합니다. 그래서 "require 'serialport'"를 통해 또 다른 보석이 필요합니다. 결과없이이 보석의 다른 버전을 검색했습니다.

올바른 보석이 필요한지 어떻게 확인할 수 있습니까?

업데이트 :

[보석의 제거 목록]

내가 RVM 전역 네임 스페이스에있는 모든 보석을 제거 할 때, 나는 아직도 '하여 SerialPort'을 필요로 사실 수 있습니다.

이제 내 보석 출력 목록이 완전히 비어 있고 '직렬 포트'가 여전히 irb 내에서 true를 반환해야합니다.

전 rvm을 사용하고 있습니다. 전 세계 보석과 내가 사용하고있는 보석 세트의 모든 보석을 비 웠습니다. 'serialport'를 포함하는 이름을 가진 시스템 보석은 없으며, serialport.o, serialport.so와 같은 보석 디렉토리에 포함될 파일을 검색했고 아무것도 찾지 못했습니다. 아마도

require 'serialport.so' 

는 true를 돌려 '하여 SerialPort를'요구에 응답 할 수 있고

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

아무것도 반환하지 않는 것을

나는에 대한 손실에 있어요.

아이디어가 있으십니까?

원래 포스트 : 나는하여 SerialPort (1.0.4) 보석을 사용하고

.

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

이 같은 이상한 : 루비 implementation.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 


, 내가 얻을 :

문서가 여기에

http://rubydoc.info/gems/serialport/1.0.4/에서 발견되는 나의 implementation.rb입니다 어디서나 초기화 메소드가 보이지 않습니다 (루비가 내부적으로 SerialPort :: new의 이름을 초기화로 지정하고 있습니까?).이것은 다른 일 근무하고 있었고, 난 변경하는의 것 아무것도 생각할 수 없다

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 gem (0.7.0)에서도 같은 오류가 발생합니다.이 오류는 두 소스에서 모두 똑같은 것으로 보입니다.

샘플 구현은 http://rubyforge.org/projects/ruby-serialport/ (http://ruby-serialport.rubyforge.org/에서 문서)

어떤 아이디어에서 발견 http://www.sfc.wide.ad.jp/~mitsuya/4U/ruby-serialport-macosx.html

후자의 보석 (루비하여 SerialPort)에서 발견된다? 감사.

+0

gem list를 실행하면 저에게 맞는 목록은 무엇입니까? –

+0

나는 그것을 보석 자체에 문제가되지 않는 것으로 좁혔다. 오히려 보석이 제거 될 때 실패하지 않기 때문에 "require 'serialport' '를 통해 다른 보석이 필요합니다. – jvatic

+0

필자는이 문제를 해결할 수있는 rvm을 사용하고 있습니다. – jvatic

답변

0

irb에서 $LOAD_PATH을보고, 나는 그 (것)들을 통해 serialport 관련된 무엇이든을 찾기 시작했다.

오랫동안 나는 ~/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/site_ruby/1.8/i686-darwin10.6.0/serialport.bundle을 발견했습니다. 삭제 한 후 require 'serialport'을 시도하고 이전에이 문제를 디버깅하기 위해 serialport gem을 제거한 것으로 예상하여 LoadError: no such file to load -- serialport을 얻었습니다.

gem install serialport 이후 내 코드가 예상대로 다시 작동합니다.

나는 명확하게 생각하고 있었다면, 나는 이것을 처음부터 끝내고 두통을 피했을 것이다. 이 문제로 비슷한 문제를 가진 사람이 더 빨리 디버깅 할 수 있기를 바랍니다.

관련 문제