excon / excon

Usable, fast, simple HTTP 1.1 for Ruby
MIT License
1.16k stars 278 forks source link

Error with excon 0.44.3 making call to Google Cloud Storage using Fog (in a delayed job) #481

Closed jonuhal closed 9 years ago

jonuhal commented 9 years ago

I am attempting to create a connection from my project to Google Cloud Storage using Fog directly. While we were updated to the latest version of excon (0.44.3) which I could confirm was in my local .rvm gemset and in my IDE, when I ran delayed job, it would throw an error and give me the following stack trace.

undefined local variable or method `e' for #<Excon::SSLSocket:0xedf5508> (NameError)
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/ssl_socket.rb:55:in `rescue in initialize'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/ssl_socket.rb:52:in `initialize'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/connection.rb:387:in `new'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/connection.rb:387:in `socket'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/connection.rb:106:in `request_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/mock.rb:47:in `request_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/instrumentor.rb:22:in `request_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/base.rb:15:in `request_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/base.rb:15:in `request_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/base.rb:15:in `request_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/connection.rb:233:in `request'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/idempotent.rb:26:in `error_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/base.rb:10:in `error_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/base.rb:10:in `error_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/connection.rb:256:in `rescue in request'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/connection.rb:204:in `request'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/idempotent.rb:26:in `error_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/base.rb:10:in `error_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/base.rb:10:in `error_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/connection.rb:256:in `rescue in request'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/connection.rb:204:in `request'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/idempotent.rb:26:in `error_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/base.rb:10:in `error_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/middlewares/base.rb:10:in `error_call'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/connection.rb:256:in `rescue in request'
~/.rvm/gems/ruby-2.1.5@union/gems/excon-0.44.2/lib/excon/connection.rb:204:in `request'
~/.rvm/gems/ruby-2.1.5@union/gems/fog-xml-0.1.1/lib/fog/xml/sax_parser_connection.rb:37:in `request'
~/.rvm/gems/ruby-2.1.5@union/gems/fog-xml-0.1.1/lib/fog/xml/connection.rb:7:in `request'
~/.rvm/gems/ruby-2.1.5@union/gems/fog-1.28.0/lib/fog/google/storage.rb:295:in `request'
~/.rvm/gems/ruby-2.1.5@union/gems/fog-1.28.0/lib/fog/google/requests/storage/get_bucket.rb:43:in `get_bucket'
~/.rvm/gems/ruby-2.1.5@union/gems/fog-1.28.0/lib/fog/google/models/storage/directories.rb:22:in `get'
~/projects/tp1/app/models/job_status.rb:60:in `get_fog_connection'
~/projects/tp1/app/models/job_status.rb:37:in `complete'
~/projects/tp1/app/jobs/reports_job.rb:10:in `render'
~/projects/tp1/app/models/job_status.rb:7:in `render'
~/projects/tp1/app/jobs/generate_pdf_job.rb:25:in `perform'
~/projects/tp1/app/models/mass_mailer/report_template.rb:33:in `block in create_mail_items'
~/.rvm/gems/ruby-2.1.5@union/gems/rack-mini-profiler-0.9.2/lib/patches/sql_patches.rb:81:in `each'
~/.rvm/gems/ruby-2.1.5@union/gems/rack-mini-profiler-0.9.2/lib/patches/sql_patches.rb:81:in `each'
~/projects/tp1/app/models/mass_mailer/report_template.rb:20:in `create_mail_items'
~/projects/tp1/app/models/mass_mailer/mass_mailing.rb:77:in `block in create_mail_records'
~/.rvm/gems/ruby-2.1.5@union/gems/activerecord-4.2.0/lib/active_record/relation/delegation.rb:46:in `each'
~/.rvm/gems/ruby-2.1.5@union/gems/activerecord-4.2.0/lib/active_record/relation/delegation.rb:46:in `each'
~/projects/tp1/app/models/mass_mailer/mass_mailing.rb:76:in `create_mail_records'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/performable_method.rb:30:in `perform'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/backend/base.rb:94:in `block in invoke_job'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in `block in initialize'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in `execute'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:40:in `run_callbacks'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/backend/base.rb:91:in `invoke_job'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:204:in `block (2 levels) in run'
~/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/timeout.rb:91:in `block in timeout'
~/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/timeout.rb:101:in `call'
~/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/timeout.rb:101:in `timeout'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:204:in `block in run'
~/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/benchmark.rb:294:in `realtime'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:203:in `run'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:280:in `block in reserve_and_run_one_job'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in `block in initialize'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in `execute'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:40:in `run_callbacks'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:280:in `reserve_and_run_one_job'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:187:in `block in work_off'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:186:in `times'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:186:in `work_off'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:150:in `block (4 levels) in start'
~/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/benchmark.rb:294:in `realtime'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:149:in `block (3 levels) in start'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in `block in initialize'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in `execute'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:40:in `run_callbacks'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:148:in `block (2 levels) in start'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:147:in `loop'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:147:in `block in start'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/plugins/clear_locks.rb:7:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/plugins/clear_locks.rb:7:in `block (2 levels) in <class:ClearLocks>'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:79:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:79:in `block (2 levels) in add'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in `block in initialize'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:79:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:79:in `block in add'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in `execute'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:40:in `run_callbacks'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/worker.rb:146:in `start'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/command.rb:124:in `run'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/command.rb:112:in `block in run_process'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/application.rb:255:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/application.rb:255:in `block in start_proc'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/daemonize.rb:82:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/daemonize.rb:82:in `call_as_daemon'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/application.rb:259:in `start_proc'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/application.rb:296:in `start'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/application_group.rb:159:in `block (2 levels) in start_all'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/application_group.rb:158:in `fork'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/application_group.rb:158:in `block in start_all'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/application_group.rb:157:in `each'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/application_group.rb:157:in `start_all'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/controller.rb:80:in `run'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons.rb:197:in `block in run_proc'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/cmdline.rb:109:in `call'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons/cmdline.rb:109:in `catch_exceptions'
~/.rvm/gems/ruby-2.1.5@union/gems/daemons-1.1.9/lib/daemons.rb:196:in `run_proc'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/command.rb:110:in `run_process'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/command.rb:91:in `block in daemonize'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/command.rb:89:in `times'
~/.rvm/gems/ruby-2.1.5@union/gems/delayed_job-4.0.6/lib/delayed/command.rb:89:in `daemonize'
bin/delayed_job:5:in `<main>'

I am unsure where it is getting a reference to excon 0.44.2 but I would continuously getting this error when attempting a connection to GCS. I tried cleaning out my project tmp folder and looked in my global gem list for a reference to excon-0.44.2, but I could not find it anywhere.

In an attempt to get something working, I hard coded the excon version in my Gemfile, bundle installed and restarted my processes. Since then, I have no had the above error again.

I'm not sure the error lies within my project setup or excon or fog or delayed jobs, but this error was pretty persistent when I had 0.44.3 installed. Reverting seems to have fixed whatever the problem was.

geemus commented 9 years ago

Thanks for the detailed report. I think the relevant fix is here: https://github.com/excon/excon/commit/3c19d7d1443a9df1b42f5a275e36e421a9d78a8b

And it should definitely not be an issue in 0.44.3+. I'm really not sure why you would have been getting an unexpected version there, but suspect it wasn't an issue internal to excon anyway. Closing for now, but definitely let me know if you have further issues or this recurs. Thanks!