Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Resque 1.25.0 uninitialized constant Resque::Forwardable (NameError) in resque.rb #1128

Closed
rafiamafia opened this issue Sep 26, 2013 · 13 comments

Comments

@rafiamafia
Copy link

I am a resque 1.24.1 user and recently installed the latest version of resque on a new machine. The version it installs by default is now 1.25.0. When I run the resque command, I get the following error:

myuser_directory/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/resque-1.25.0.pre/lib/resque.rb:51:in <module:Resque>': uninitialized constant Resque::Forwardable (NameError) from /Users/rq/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/resque-1.25.0.pre/lib/resque.rb:23:in<top (required)>'
from /Users/rq/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rubygems/custom_require.rb:60:in require' from /Users/rq/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rubygems/custom_require.rb:60:inrescue in require'
from /Users/rq/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rubygems/custom_require.rb:35:in `require'

I was not able to find any help online and realized this version was released just recently: September 16. I reverted to version 1.24.1 for now. Please let me know if this is a known issue with 1.25.0.

Thank you,
Rafia Qutab

@steveklabnik
Copy link
Member

Forwardable is in the ruby standard library, are you sure your ruby install
is ok?

On Wednesday, September 25, 2013, Rafia Qutab wrote:

I am a resque 1.24.1 user and recently installed the latest version of
rescue on a new machine. The version it installs by default is now 1.25.0.
When I use the resque command in CL, I get the following error:

myuser_directory/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/resque-1.25.0.pre/lib/resque.rb:51:in
module:Resque': uninitialized constant Resque::Forwardable (NameError)
from
/Users/rq/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/resque-1.25.0.pre/lib/resque.rb:23:in
'
from
/Users/rq/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rubygems/custom_require.rb:60:in
require'
from
/Users/rq/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rubygems/custom_require.rb:60:inrescue
in require'
from
/Users/rq/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/rubygems/custom_require.rb:35:in
`require'

I was not able to find any help online and realized this version was
released just recently: September 16. I reverted to version 1.24.1 for now.
Please let me know if this is a known issue with 1.25.0.

Thank you,


Reply to this email directly or view it on GitHubhttps://github.com//issues/1128
.

@rafiamafia
Copy link
Author

I am using my development machine. So yes and I am using ruby 1.9.3p194. I no longer see the issue with Resque 1.24.1 version. So is there a compatibility issue?

@steveklabnik
Copy link
Member

I don't know. Can you run code that uses Forwardable?

@cbitter78
Copy link

I am getting the same error. Its Resque::Forwardable which would suggest that the Forwardable class in the Resque module is missing. This would not be the ruby Forwardable class. I downgraded from resque-1.25.0 to resque-1.24.1 and the problem went away. I would assume there is a bug in resque-1.25.0 as the issue started when I upgraded to it.

@steveklabnik
Copy link
Member

forward able is not part of Resque, it is part of the ruby standard library.

@rrouse
Copy link

rrouse commented Sep 26, 2013

The pre gem on Rubygems doesn't have the forwardable require in it

@yaauie
Copy link
Member

yaauie commented Sep 26, 2013

In 1.9.3 it is stdlib, not core, so you have to require 'forwardable' to get it. Oddly enough, there was no require statement. I've pushed a commit onto 1-x-stable that adds one: fcf1eb9, so this will be fixed in the next version.

irb(main):001:0> Forwardable
NameError: uninitialized constant Forwardable
    from (irb):1
    from /Users/yaauie/.rbenv/versions/1.9.3-p194/bin/irb:12:in `<main>'
irb(main):002:0> require 'forwardable'
=> true
irb(main):003:0> Forwardable
=> Forwardable

@yaauie yaauie closed this as completed Sep 26, 2013
@zzak
Copy link

zzak commented Sep 26, 2013

You might also want to consider changing this line instead to:

extend ::Forwardable

This exists in master too. I was about to submit a patch for this but the internet at rockymtnruby is somewhat lagging

@yaauie
Copy link
Member

yaauie commented Sep 26, 2013

@zzak I've pushed fully-qualified constant reference patches to both 1-x-stable and master, although master already had a require. Thanks for the suggestion.

@rafiamafia
Copy link
Author

Great! Thank you.

@steveklabnik
Copy link
Member

I just released 1.25.1 with this fix. I am so sorry. :(

@tenderlove
Copy link
Contributor

Just so people know why this slipped past the tests; bundler was requiring forwardable:

[aaron@higgins ~]$ touch Gemfile; ruby -e'p Forwardable'
-e:1:in `<main>': uninitialized constant Forwardable (NameError)
[aaron@higgins ~]$ touch Gemfile; ruby -rbundler/setup -e'p Forwardable'
Forwardable
[aaron@higgins ~]$

Here is how I discovered this fact:

[aaron@higgins resque (a57479d...)]$ ruby -Ilib:test -r test_helper -e'p Forwardable'
/usr/local/bin/redis-server
Starting redis for testing at localhost:9736...
Forwardable
Run options: --seed 10843

# Running tests:



Finished tests in 0.000459s, 0.0000 tests/s, 0.0000 assertions/s.

0 tests, 0 assertions, 0 failures, 0 errors, 0 skips
Killing test redis server...
[aaron@higgins resque (a57479d...)]$ echo "puts '#'*90; puts caller; puts '#'*90" > lib/forwardable.rb
[aaron@higgins resque (a57479d...)]$ ruby -Ilib:test -r test_helper -e'p Forwardable'
##########################################################################################
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:in `require'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:in `require'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/spec_set.rb:2:in `<top (required)>'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/definition.rb:50:in `initialize'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/dsl.rb:154:in `new'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/dsl.rb:154:in `to_definition'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/dsl.rb:10:in `evaluate'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/definition.rb:19:in `build'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler.rb:148:in `definition'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler.rb:116:in `setup'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/setup.rb:7:in `<top (required)>'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:110:in `require'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:110:in `rescue in require'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:35:in `require'
/Users/aaron/git/resque/test/test_helper.rb:2:in `<top (required)>'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:in `require'
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:in `require'
##########################################################################################
/Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/spec_set.rb:6:in `<class:SpecSet>': uninitialized constant Bundler::SpecSet::Forwardable (NameError)
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/spec_set.rb:5:in `<module:Bundler>'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/spec_set.rb:4:in `<top (required)>'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/definition.rb:50:in `initialize'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/dsl.rb:154:in `new'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/dsl.rb:154:in `to_definition'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/dsl.rb:10:in `evaluate'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/definition.rb:19:in `build'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler.rb:148:in `definition'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler.rb:116:in `setup'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/gems/2.1.0/gems/bundler-1.3.2/lib/bundler/setup.rb:7:in `<top (required)>'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:110:in `require'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:110:in `rescue in require'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:35:in `require'
    from /Users/aaron/git/resque/test/test_helper.rb:2:in `<top (required)>'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:in `require'
    from /Users/aaron/.rbenv/versions/2.1.0-dev/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:45:in `require'
[aaron@higgins resque (a57479d...)]$

This is one reason I really like $LOAD_PATH hacking. :-)

@chancancode
Copy link

That's an awesome hack. I need to bookmark this somewhere

biril added a commit to biril/backbone-control that referenced this issue Feb 17, 2015
Because Travis says
/home/travis/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/1.9.1/rake/ext/module.rb:36:in
`const_missing': uninitialized constant Sauce::Selenium2::Forwardable (NameError)
from /home/travis/.rvm/gems/ruby-1.9.3-p551/gems/sauce-3.5.4/lib/sauce/selenium.rb:33:in
`<class:Selenium2>'. And this seems relevant to
resque/resque#1128.
myronmarston referenced this issue in rspec/rspec-core Apr 20, 2016
When you’re troubleshooting an order dependent
failure, you want to get the repro case down to
a minimal run that loads and runs as few specs
as possible. With the old random ordering implementation,
that was hard to achieve because while rerunning with
a given seed produced the same order when the exact
same set of examples were loaded, the ordering would
be completely different when a subset was loaded.

By ordering by `hash(seed + example_id)` it ensures
that the ordering of any two examples should stay
consistently regardless of how many other examples are
loaded.

Jenkins or MD5 is significantly slower than `shuffle`,
but I think the tradeoff is worth it here. This isn’t
a hot spot.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants