GithubHelp home page GithubHelp logo

celluloid / celluloid-zmq Goto Github PK

View Code? Open in Web Editor NEW
84.0 13.0 25.0 431 KB

UNMAINTAINED: See celluloid/celluloid#779 - Celluloid actors that talk over the 0MQ protocol

Home Page: https://celluloid.io

License: MIT License

Ruby 100.00%

celluloid-zmq's Introduction

Celluloid::ZMQ

Gem Version Build Status Code Climate Coverage Status

Celluloid::ZMQ provides Celluloid actors that can interact with 0MQ sockets. Underneath, it's built on the CZTop library. Celluloid::ZMQ was primarily created for the purpose of writing DCell, distributed Celluloid over 0MQ, so before you go building your own distributed Celluloid systems with Celluloid::ZMQ, be sure to give DCell a look and decide if it fits your purposes.

It provides different Celluloid::ZMQ::Socket classes which can be initialized then sent bind or connect. Once bound or connected, the socket can read or send depending on whether it's readable or writable.

Supported Platforms

You will need the ZeroMQ library and the CZMQ library installed as it's accessed via FFI. See CZTop for installation instructions.

Supported Rubies are MRI >= 2.2, JRuby >= 9.0.4.0, and Rubinius >= 3.7.

0MQ Socket Types

The following 0MQ socket types are supported (see types.rb for more info)

  • Req / Rep
  • Push / Pull
  • Pub / Sub
  • Dealer / Router

Usage

require 'celluloid/zmq'

class Server
  include Celluloid::ZMQ

  def initialize(address)
    @socket = Socket::Pull.new

    begin
      @socket.bind(address)
    rescue IOError
      @socket.close
      raise
    end
  end

  def run
    loop { async.handle_message @socket.read }
  end

  def handle_message(message)
    puts "got message: #{message}"
  end
end

class Client
  include Celluloid::ZMQ

  def initialize(address)
    @socket = Socket::Push.new

    begin
      @socket.connect(address)
    rescue IOError
      @socket.close
      raise
    end
  end

  def write(message)
    @socket << message
    nil
  end
end

addr = 'tcp://127.0.0.1:3435'

server = Server.new(addr)
client = Client.new(addr)

server.async.run
client.write('hi')

sleep

Copyright

Copyright (c) 2014-2015 Tony Arcieri, Donovan Keme.

Distributed under the MIT License. See LICENSE.txt for further details.

celluloid-zmq's People

Contributors

benlangfeld avatar bts avatar chuckremes avatar cootcraig avatar digitalextremist avatar grantr avatar gurpartap avatar halorgium avatar jasonroelofs avatar jnicklas avatar mjio avatar niamster avatar paddor avatar tarcieri avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

celluloid-zmq's Issues

Class hierarchy deeper than one level breaks on 0.14.0

I've been debugging this for a looong time today. Finally I found that it's class hierarchies deeper than one level that simply won't work on Celluloid::ZMQ 0.14.0 (perhaps this applies to "standard" Celluloid as well - I don't know).

Here's some simple example code that works on 0.13.0 but not on 0.14.0, if you have both installed just switch to 0.14 using the ENV var CELLULOID_14 (set to anything).

if ENV.key?('CELLULOID_14')
  gem 'celluloid-zmq', '=0.14.0'
  gem 'celluloid', '=0.14.0'
#gem 'celluloid-io', '=0.14.0'
else
  gem 'celluloid-io', '=0.13.0'
  gem 'celluloid-zmq', '=0.13.0'
  gem 'celluloid', '=0.13.0'
end
require "celluloid/zmq"
puts Celluloid::VERSION

if (Celluloid::VERSION.split('.').map { |v| v.to_i })[1]<14
  puts "Patching Celluloid Socket since Celluloid version is <0.14"
  module Celluloid
    module ZMQ

      class Socket
        def identity=(value)
          @socket.identity = value
        end

        def identity
          @socket.identity
        end
      end

    end
  end
end

class ZMQEntity
  include Celluloid::ZMQ


  def initialize(identity)
    @identity = identity
  end

  def socket
    @socket ||= Celluloid::ZMQ::RouterSocket.new.tap do |socket|
      socket.identity = @identity
    end
  end

  def read
    puts "#{self.class} reading socket"
    msg = [socket.read]
    puts "#{self.class} read a part"
    msg << socket.read while socket.more_parts?
    puts "#{self.class} read the rest"
    msg
  end

  def start
    if @connect_to
      socket.connect(@connect_to)
    else
      socket.bind(@bind_to)
    end
    async.run
  end

  def write(msg, to)
    puts "write #{[to,msg].flatten.compact.inspect}"
    socket.write([to,msg].flatten.compact)
  end

  def run
    loop { async.handle_message read }
  end

  def handle_message(msg)
    from, payload = msg[-2..-1]
    receive_message(payload, from)
  end

  def receive_message(payload, from)
  end

end

class Blah < ZMQEntity
end

class Client < Blah

  def initialize(identity, destination, connect_to)
    @identity = identity
    @destination = destination
    @connect_to = connect_to
  end

  def start
    super
    after(2) do
      puts "initial writing stuff"
      write("initial hello from client", @destination)
    end
    every(5) do
      puts "writing stuff (5)"
      write("hello from client (5)", @destination)
    end
    every(8) do
      puts "writing stuff (8)"
      write("hello from client (8)", @destination)
    end
  end

  def receive_message(payload, from)
    puts "client got message from #{from}: '#{payload}'"
  end

end

class Server < Blah

  def initialize(identity, bind_to)
    @identity = identity
    @bind_to = bind_to
  end

  def receive_message(payload, from)
    puts "server got message '#{payload}' from #{from}"
    write("hi there #{from}!", from)
  end

end


client = Client.new("client", "server", "tcp://127.0.0.1:7788")
server = Server.new("server", "tcp://127.0.0.1:7788")
puts "starting client"
client.start
puts "starting server"
server.start

sleep

Function 'zlistx_head' not found

Updated to master to try the new cztop version of celluloid-zmq. Getting this error:

/Users/tpitale/.gem/ruby/2.2.2/gems/ffi-1.9.10/lib/ffi/library.rb:261:in `attach_function': Function 'zlistx_head' not found in [/usr/local/lib/libczmq.dylib] (FFI::NotFoundError)
    from /Users/tpitale/.gem/ruby/2.2.2/gems/czmq-ffi-gen-0.8.3/lib/czmq-ffi-gen/czmq/ffi.rb:410:in `<module:FFI>'
    from /Users/tpitale/.gem/ruby/2.2.2/gems/czmq-ffi-gen-0.8.3/lib/czmq-ffi-gen/czmq/ffi.rb:10:in `<module:CZMQ>'
    from /Users/tpitale/.gem/ruby/2.2.2/gems/czmq-ffi-gen-0.8.3/lib/czmq-ffi-gen/czmq/ffi.rb:9:in `<top (required)>'
    from /Users/tpitale/.gem/ruby/2.2.2/gems/czmq-ffi-gen-0.8.3/lib/czmq-ffi-gen.rb:1:in `require_relative'
    from /Users/tpitale/.gem/ruby/2.2.2/gems/czmq-ffi-gen-0.8.3/lib/czmq-ffi-gen.rb:1:in `<top (required)>'
    from /Users/tpitale/.gem/ruby/2.2.2/gems/cztop-0.4.0/lib/cztop.rb:1:in `require'
    from /Users/tpitale/.gem/ruby/2.2.2/gems/cztop-0.4.0/lib/cztop.rb:1:in `<top (required)>'
    from /Users/tpitale/.gem/ruby/2.2.2/bundler/gems/celluloid-zmq-6e4b9eded922/lib/celluloid/zmq.rb:1:in `require'
    from /Users/tpitale/.gem/ruby/2.2.2/bundler/gems/celluloid-zmq-6e4b9eded922/lib/celluloid/zmq.rb:1:in `<top (required)>'
    from /Users/tpitale/.gem/ruby/2.2.2/bundler/gems/celluloid-zmq-6e4b9eded922/lib/celluloid/zmq/current.rb:2:in `require'
    from /Users/tpitale/.gem/ruby/2.2.2/bundler/gems/celluloid-zmq-6e4b9eded922/lib/celluloid/zmq/current.rb:2:in `<top (required)>'

Running MRI 2.2.2, FFI 1.9.10 (appears to be the latest release).

No specs?

Am I missing something, or does this project not have any tests?

Multi-process example.

It would be great to have an example which runs in multiple processes which communicate between each other, and not just separate threads which communicate within the same process.

exclamation mark

Does the ! have a special meaning or is that a typo?

  def run
    loop { handle_message! @socket.read }
  end

  def handle_message(message)
...

Authentication and Encryption

In early analysis of 0MQ security underlying DCell, it seems the best way to bring authentication and encryption to DCell is by implementing CurveZMQ:

https://github.com/zeromq/libcurve

Research the API; if possible and wise: integrate libcurve to provide security for DCell.

  • Research API
  • Write integration
  • Test implementation
  • Write applicable tests
  • Update documentation
  • Write example code

Coverage:

  • Encryption
  • Authentication

Port to rbczmq

I keep getting segfaults from "assertion failed" error messages from programs involving ZMQ. Even just running rake spec in this project brings those errors. I tried on OSX 10.10 and 10.11, same result. I tried with and without lib sodium, same result. Then I noticed that maybe it's because https://github.com/chuckremes/ffi-rzmq has been put into maintenance mode. Apparently https://github.com/methodmissing/rbczmq is the way to go. So I'm thinking about porting celluloid-zmq to that library. Is that a good idea? Or is the low-level approach of ffi-rzmq actually needed by celluloid-zmq?

Looking for setsockopt

Probably a github newbie question but I need the Celluloid::ZMQ::Socket setsockopt function that tobert did:

#1

I see it in his github clone, but not in the celluloid-zmq master.

By the way I've done my first little demo with celluloid-zmq and other than patching in setsockopt it was nice and easy.

`rake spec` throw exceptions

$ rake spec
/usr/local/Cellar/ruby/2.4.1_1/bin/ruby -I/usr/local/lib/ruby/gems/2.4.0/gems/rspec-support-3.5.0/lib:/usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb
/opt/dev_opensource/celluloid-zmq/celluloid-zmq/culture/gems/loader.rb:7: warning: method redefined; discarding old []
/opt/dev_opensource/celluloid-zmq/culture/gems/loader.rb:7: warning: previous definition of [] was here
/opt/dev_opensource/celluloid-zmq/celluloid-zmq/culture/gems/loader.rb:16: warning: method redefined; discarding old []
/opt/dev_opensource/celluloid-zmq/culture/gems/loader.rb:16: warning: previous definition of [] was here
/opt/dev_opensource/celluloid-zmq/celluloid-zmq/culture/gems/loader.rb:93: warning: method redefined; discarding old loader
/opt/dev_opensource/celluloid-zmq/culture/gems/loader.rb:93: warning: previous definition of loader was here
/opt/dev_opensource/celluloid-zmq/celluloid-zmq/lib/celluloid/zmq/version.rb:3: warning: already initialized constant Celluloid::ZMQ::VERSION
/opt/dev_opensource/celluloid-zmq/lib/celluloid/zmq/version.rb:3: warning: previous definition of VERSION was here
[Coveralls] Set up the SimpleCov formatter.
[Coveralls] Using SimpleCov's default settings.
[Coveralls] Outside the CI environment, not sending data.
/usr/local/lib/ruby/gems/2.4.0/bundler/gems/celluloid-96fdf84c0d92/spec/support/configure_rspec.rb:7:in `block in <top (required)>': undefined method `verbose_retry=' for #<RSpec::Core::Configuration:0x007f92789055d0> (NoMethodError)
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core.rb:98:in `configure'
	from /usr/local/lib/ruby/gems/2.4.0/bundler/gems/celluloid-96fdf84c0d92/spec/support/configure_rspec.rb:1:in `<top (required)>'
	from /usr/local/lib/ruby/gems/2.4.0/bundler/gems/celluloid-96fdf84c0d92/lib/celluloid/rspec.rb:54:in `require'
	from /usr/local/lib/ruby/gems/2.4.0/bundler/gems/celluloid-96fdf84c0d92/lib/celluloid/rspec.rb:54:in `block in <top (required)>'
	from /usr/local/lib/ruby/gems/2.4.0/bundler/gems/celluloid-96fdf84c0d92/lib/celluloid/rspec.rb:53:in `each'
	from /usr/local/lib/ruby/gems/2.4.0/bundler/gems/celluloid-96fdf84c0d92/lib/celluloid/rspec.rb:53:in `<top (required)>'
	from /opt/dev_opensource/celluloid-zmq/spec/spec_helper.rb:8:in `require'
	from /opt/dev_opensource/celluloid-zmq/spec/spec_helper.rb:8:in `<top (required)>'
	from /usr/local/Cellar/ruby/2.4.1_1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /usr/local/Cellar/ruby/2.4.1_1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core/configuration.rb:1394:in `block in requires='
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core/configuration.rb:1394:in `each'
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core/configuration.rb:1394:in `requires='
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core/configuration_options.rb:112:in `block in process_options_into'
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core/configuration_options.rb:111:in `each'
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core/configuration_options.rb:111:in `process_options_into'
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core/configuration_options.rb:21:in `configure'
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb:99:in `setup'
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb:86:in `run'
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb:71:in `run'
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb:45:in `invoke'
	from /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/exe/rspec:4:in `<main>'
/usr/local/Cellar/ruby/2.4.1_1/bin/ruby -I/usr/local/lib/ruby/gems/2.4.0/gems/rspec-support-3.5.0/lib:/usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/lib /usr/local/lib/ruby/gems/2.4.0/gems/rspec-core-3.5.4/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb failed

release 0.17

I propose to release 0.17 as at this point the master branch is quite stable

No License.txt

The readme file says to "see LICENSE.txt for more information," but there is no License.txt in the project.

Assertion failed: check () (src/msg.cpp:248)

I am trying to get even the examples to work on my desktop (Manjaro - with zmq-4.1.2-3 installed). I am able to run Celluloid::ZMQ.init, and include Celluloid::ZMQ in a class. However, as soon as I attempt to instantiate the class, I get the above assertion and my process exits.

Is celluloid-zmq compatible with zmq-4.1.2-3? If not, which versions is it compatible with? Any thoughts on how I can troubleshoot this issue?

How to handle closing sockets?

I'm in the process of writing a few specs for this gem. I ran into a problem which I wanted to get some feedback on. In order to separate tests more cleanly from each other, I wrapped all tests in an around filter which calls Celluloid::ZMQ.init before and Celluloid::ZMQ.terminate afterwards, so it sets up a clean ZMQ context for each test. This seems to work nicely, except that zmq_term hangs indefinitely until all sockets created within the context are explicitly closed. This means that every socket we create, we need to explicitly close.

The way I see it, there are two ways of handling this:

  1. Simply update the documentation. Leave it up to the user to make sure they call socket.close in a finalizer.

  2. Keep track of all sockets created within an actor and add a finalizer to Celluloid::ZMQ which closes them automatically.

While (2) is more user friendly, it could also be problematic, since Celluloid can only have one finalizer per actor (why, btw?), if the user ever adds their own finalizer to the actor, they would overwrite the built in finalizer and mess up the sockets getting closed. So in a way, I think (1) is the better solution at this point.

What do you think?

Test suite broken

Running rake results in almost all test cases failing with the same error:

      ArgumentError:
        No actors given to Tree to supervise.

See here. Solving this issue will help solve #56.

Internal reactor lock on high message pressure in router-dealer pair

If a dealer issues lots of async messages, the reactor gets deadlocked.
Here are the code snippets to reproduce the issue: router and dealer
Depending on your test box you might have to increase the number of asynchronous requests. In my case ~2000 was sufficient.

A call trace indicating the deadlock:

^CD, [2015-03-15T01:00:00.369225 #9950] DEBUG -- : Terminating 1 actor...
^CW, [2015-03-15T01:00:02.347057 #9950]  WARN -- : Terminating task: type=:call, meta={:method_name=>:run}, status=:zmqwait
        Celluloid::TaskFiber backtrace unavailable. Please try `Celluloid.task_class = Celluloid::TaskThread` if you need backtraces here.
/home/niam/.gem/ruby/2.2.0/bundler/gems/ffi-rzmq-eba1101e44f1/lib/ffi-rzmq/util.rb:45:in `zmq_strerror': Interrupt
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/ffi-rzmq-eba1101e44f1/lib/ffi-rzmq/util.rb:45:in `error_string'
        from /projects/celluloid/celluloid-zmq/lib/celluloid/zmq/waker.rb:30:in `block in signal'
        from /projects/celluloid/celluloid-zmq/lib/celluloid/zmq/waker.rb:28:in `synchronize'
        from /projects/celluloid/celluloid-zmq/lib/celluloid/zmq/waker.rb:28:in `signal'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/celluloid-21b8c5bd5e65/lib/celluloid/evented_mailbox.rb:29:in `<<'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/celluloid-21b8c5bd5e65/lib/celluloid/proxies/actor_proxy.rb:35:in `terminate!'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/celluloid-21b8c5bd5e65/lib/celluloid/proxies/cell_proxy.rb:65:in `terminate!'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/celluloid-21b8c5bd5e65/lib/celluloid/actor_system.rb:72:in `block (2 levels) in shutdown'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/celluloid-21b8c5bd5e65/lib/celluloid/actor_system.rb:70:in `each'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/celluloid-21b8c5bd5e65/lib/celluloid/actor_system.rb:70:in `block in shutdown'
        from /usr/lib/ruby/2.2.0/timeout.rb:89:in `block in timeout'
        from /usr/lib/ruby/2.2.0/timeout.rb:34:in `block in catch'
        from /usr/lib/ruby/2.2.0/timeout.rb:34:in `catch'
        from /usr/lib/ruby/2.2.0/timeout.rb:34:in `catch'
        from /usr/lib/ruby/2.2.0/timeout.rb:104:in `timeout'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/celluloid-21b8c5bd5e65/lib/celluloid/actor_system.rb:66:in `shutdown'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/celluloid-21b8c5bd5e65/lib/celluloid.rb:156:in `shutdown'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/celluloid-21b8c5bd5e65/lib/celluloid.rb:145:in `block in register_shutdown'
/home/niam/.gem/ruby/2.2.0/bundler/gems/ffi-rzmq-eba1101e44f1/lib/ffi-rzmq/util.rb:38:in `zmq_errno': Interrupt
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/ffi-rzmq-eba1101e44f1/lib/ffi-rzmq/util.rb:38:in `errno'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/ffi-rzmq-eba1101e44f1/lib/ffi-rzmq/util.rb:45:in `error_string'
        from /projects/celluloid/celluloid-zmq/lib/celluloid/zmq/waker.rb:30:in `block in signal'
        from /projects/celluloid/celluloid-zmq/lib/celluloid/zmq/waker.rb:28:in `synchronize'
        from /projects/celluloid/celluloid-zmq/lib/celluloid/zmq/waker.rb:28:in `signal'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/celluloid-21b8c5bd5e65/lib/celluloid/evented_mailbox.rb:29:in `<<'
        from /home/niam/.gem/ruby/2.2.0/bundler/gems/celluloid-21b8c5bd5e65/lib/celluloid/proxies/future_proxy.rb:30:in `method_missing'
        from ./zmq-test-dealer.rb:44:in `block in <main>'
        from ./zmq-test-dealer.rb:43:in `times'
        from ./zmq-test-dealer.rb:43:in `<main>'

How thread safety is handle by Celluloid-ZMQ with ffi-rzmq

Fail to find a google group or an irc channel had resisted me to post the query over here.

Looking through the README code. I'm trying to understand how does Celluloid-zmq handle Thread Safety when used with ffi-rzmq.

Googling around I found this https://stackoverflow.com/questions/38773624/thread-issue-in-zeromq-ruby

But no concrete answer for it.

I see the Celluloid-zmq is moved to CZMQ but we are using the version that still uses ffi-rzmq support.

The libzmq version 2.0.7 is incompatible with ffi-rzmq

getting runtime error:

.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/ffi-rzmq-0.9.6/lib/ffi-rzmq/libzmq.rb:273:in `module:ZMQ': The libzmq version 2.0.7 is incompatible with ffi-rzmq. (LoadError)

using rbenv with 1.9.3-p194 and gems :
$ gem list

*** LOCAL GEMS ***

addressable (2.3.2)
bigdecimal (1.1.0)
builder (3.0.0)
celluloid (0.12.1.pre)
celluloid-io (0.12.1)
celluloid-zmq (0.12.1)
certified (0.1.1)
cucumber (0.10.0)
dcell (0.11.0, 0.10.0)
diff-lcs (1.1.2)
dynect_rest (0.4.3)
expectations (2.0.0)
facter (1.6.13)
ffi (1.1.5)
ffi-rzmq (0.9.6)
gherkin (2.3.3)
hiredis (0.4.5)
http (0.3.0)
http_parser.rb (0.5.3)
io-console (0.3)
json (1.5.4, 1.4.6)
mime-types (1.19)
minitest (2.5.1)
mocha (0.9.11)
moneta (0.6.0)
netrc (0.7.7)
nio4r (0.4.0)
parallel (0.5.18)
rack (1.4.1)
rake (0.9.2.2, 0.8.7)
rdoc (3.9.4)
redis (3.0.1)
redis-namespace (1.2.1)
reel (0.0.2)
rest-client (1.6.7)
rspec (2.4.0)
rspec-core (2.4.0)
rspec-expectations (2.4.0)
rspec-mocks (2.4.0)
term-ansicolor (1.0.5)
timers (1.0.1)
websocket_parser (0.1.0)

tried standard gems as well as rebuilding all celluloid celluloid-io celluloid-zmq dcell ffi ffi-rzmq with same result.

running Ubuntu 10.04.4 LTS on x86_64

i tried with the standard ubuntu packages and without :
$ dpkg -l | egrep -i "zmq|zeromq|0mq"
rc libzmq0 2.0.10-1build1 The ZeroMQ messaging library
rc libzmq1 2.2.0-1chl1~lucid1 ZeroMQ lightweight messaging kernel (shared

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.