`require ': не может загрузить такой файл - curses (LoadError) - PullRequest
0 голосов
/ 13 октября 2018

Я начинающий рубин и пытаюсь понять и изучить рубин.Я столкнулся с этой ошибкой при попытке запустить файл ruby, который использует «требуют проклятия», но я получаю следующую ошибку при этом.Приветствуется любая помощь или подсказка.

desktop$ ruby curses.rb 
/desktop/jsipp-master$ gem list

*** LOCAL GEMS ***

bigdecimal (1.2.8)
CFPropertyList (2.2.8)
curses (1.2.4)
did_you_mean (1.0.0)
enumerate (0.0.7)
enumerated (1.0.1)
enumeration (1.3.3)
ffi (1.9.25)
ffi-rzmq (2.0.6)
ffi-rzmq-core (1.0.6)
io-console (0.4.5)
json (1.8.3)
libxml-ruby (2.9.0)
minitest (5.8.5)
net-telnet (0.1.1)
nokogiri (1.5.6)
power_assert (0.2.6)
psych (2.1.0)
rake (10.4.2)
rdoc (4.2.1)
sqlite3 (1.3.11)
test-unit (3.1.5)

/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- curses (LoadError)
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from curses.rb:3:in `<main>'

   jsipp-master$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [universal.x86_64-darwin17]

#!/usr/bin/ruby

require 'curses'
require 'ffi-rzmq'
require 'enumerator'

POSITIONS = "%15s %8s %8s %12s %12s %12s\n"
POSITIONS2 = "%-38s %-38s\n"
POSITIONS3 = "%15s %-12s%%-10s%%-10s%%-10s%%-15s\n"

OUT_ARROW = "-------->"
IN_ARROW = "<--------"
PAUSE =    "[%6dms]"

class MinuteLongBuffer
  def initialize
    @values = []
  end

  def add v
    @values << [Time.new.to_f, v]
  end

  def count
    @values = @values.keep_if {|v| v[0] > (Time.new.to_f - 1)}
    @values.length
  end
end

class Scenario
  def parse_scenario_desc desc
    @strings = []
    @msg_counts = []
    parts = desc.split(";")
    parts.each do |part|
      type, value = part.split(":")
      if type == "IN"
        @strings << (POSITIONS3 % [value, IN_ARROW])
      elsif type == "OUT"
        @strings << (POSITIONS3 % [value, OUT_ARROW])
      elsif type == "PAUSE"
        @strings << (POSITIONS3 % [(PAUSE % value), ""])
      end
      @msg_counts << 0
      @unexpected_msg_counts << 0
      @timeout_counts << 0
    end
  end

  def inc_msg idx
    @msg_counts[idx.to_i] += 1
    if idx.to_i == 0
      @new_calls.add 1
    end
  end

  def inc_unexpected idx
    @unexpected_msg_counts[idx.to_i] += 1
  end

  def inc_timeout idx
    @timeout_counts[idx.to_i] += 1
  end

  def update
    Curses.clear
    Curses.addstr(POSITIONS % ["Call-rate", "Length", "Port", "Total-time", "Total-calls", "Remote-host"])
    Curses.addstr(POSITIONS % [("?cps"), "? ms", "????", ("%.2fs" % (Time.new.to_f - @start)), "?", "??? (???)"])
    Curses.addstr("\n")
    Curses.addstr(POSITIONS2 % ["%d new calls during 1.000s period" % @new_calls.count, "?ms scheduler resolution"])
    Curses.addstr(POSITIONS2 % ["? concurrent calls (limit ?)", "Peak was ? calls, after ?s"])
    Curses.addstr(POSITIONS2 % ["? out-of-call msg (discarded)", "? open sockets"])
    Curses.addstr("\n")
    Curses.addstr((POSITIONS3 % ["", "",]) % ["Messages", "Retrans", "Timeout", "Unexpected-Msg"])
    @strings.each_with_index do |s, i|
      Curses.addstr(s % [@msg_counts[i], 0, @timeout_counts[i], @unexpected_msg_counts[i]])
    end
    Curses.refresh
  end

  def initialize
    @new_calls = MinuteLongBuffer.new
    @strings = []
    @msg_counts = []
    @unexpected_msg_counts = []
    @timeout_counts = []
    @start = Time.new.to_f

    Thread.new do
      context = ZMQ::Context.new
      socket = context.socket(ZMQ::SUB)
      socket.connect("tcp://localhost:5556")
      socket.setsockopt(ZMQ::SUBSCRIBE, "SIPP")

      socket2 = context.socket(ZMQ::REQ)
      socket2.connect("tcp://localhost:5557")
      socket2.send_string "",0
      socket2.recv_string msg2 = ""
      parse_scenario_desc msg2
      loop do
        socket.recv_strings(msgs = [])
        msgs.each do |msg|
        name, ts, scenario, callnum, callid, idx, result = msg.split(":")
        if name == "SIPP-PHASE_SUCCESS"
          inc_msg idx
        end
        if name == "SIPP-UNEXPECTED_MSG_RECVD"
          inc_unexpected idx
        end
        if name == "SIPP-RECV_TIMED_OUT"
          inc_timeout idx
        end
      end
      end
    end
  end
end

SCENARIO = Scenario.new

Curses.init_screen()

Thread.new do
  loop do
    tmp = Curses.getch
  end
end

loop do
  SCENARIO.update
  sleep 1
end

Также, когда я проверяю версию ruby, она указывает на 2.3.3, но во время работы показывает мне, что ruby ​​2.3.0 запускает файл.Если бы кто-то мог объяснить, почему это также помогло бы мне.После установки гемов в файл вручную я получаю еще одну ошибку, см. Ниже.

/jsipp-master$ ruby curses.rb
Unable to load this gem. The libzmq library (or DLL) could not be found.
If this is a Windows platform, make sure libzmq.dll is on the PATH.
If the DLL was built with mingw, make sure the other two dependent DLLs,
libgcc_s_sjlj-1.dll and libstdc++6.dll, are also on the PATH.
For non-Windows platforms, make sure libzmq is located in this search path:
["/Library/Ruby/Gems/2.3.0/gems/ffi-rzmq-core-1.0.6/lib/ffi-rzmq-core/../../ext/libzmq.dylib", "/usr/local/bin/libzmq.dylib", "/usr/bin/libzmq.dylib", "/bin/libzmq.dylib", "/usr/sbin/libzmq.dylib", "/sbin/libzmq.dylib", "/opt/X11/bin/libzmq.dylib", "/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/libzmq.dylib", "/usr/local/lib/libzmq.dylib", "/opt/local/lib/libzmq.dylib", "/usr/local/lib/libzmq.dylib", "/usr/lib64/libzmq.dylib"]
/Library/Ruby/Gems/2.3.0/gems/ffi-rzmq-core-1.0.6/lib/ffi-rzmq-core/libzmq.rb:61:in `rescue in <module:LibZMQ>': The libzmq library (or DLL) could not be loaded (LoadError)
    from /Library/Ruby/Gems/2.3.0/gems/ffi-rzmq-core-1.0.6/lib/ffi-rzmq-core/libzmq.rb:10:in `<module:LibZMQ>'
    from /Library/Ruby/Gems/2.3.0/gems/ffi-rzmq-core-1.0.6/lib/ffi-rzmq-core/libzmq.rb:7:in `<top (required)>'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Library/Ruby/Gems/2.3.0/gems/ffi-rzmq-core-1.0.6/lib/ffi-rzmq-core.rb:3:in `<top (required)>'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Library/Ruby/Gems/2.3.0/gems/ffi-rzmq-2.0.6/lib/ffi-rzmq.rb:66:in `<top (required)>'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `rescue in require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
    from curses.rb:4:in `<main>'

1 Ответ

0 голосов
/ 14 октября 2018

Возможно, вы не установили гем curses.

Вы можете проверить, установлен ли он, с помощью команды gem list.Если вашего драгоценного камня нет в списке, он не установлен:

$ gem list curses

*** LOCAL GEMS ***

$ 

Если он не установлен, установите драгоценный камень с помощью команды gem install:

$ gem install curses
Fetching: curses-1.2.4.gem (100%)
Building native extensions. This could take a while...
Successfully installed curses-1.2.4
Parsing documentation for curses-1.2.4
Installing ri documentation for curses-1.2.4
Done installing documentation for curses after 0 seconds
1 gem installed
$ 

Вы можете прочитатьбольше в справке по онлайн-команде gem .

Это поможет вам избежать ошибки, которую вы видите.

...