2011-03-11 2 views
2

Mon application fait des messages https à PayPal. Avec le pg gem spécifié dans le fichier Gemfile, l'opération de publication entraîne le blocage de WEBBrick. Si je retire le pg gem du Gemfile, alors le crash ne se produit pas et mon post va bien. (Il a fallu une éternité pour comprendre que c'est ce qui le provoquait, mais il est répétable à 100%.)Rails 3 Gemfile contenant pg gem provoque une panne de serveur

Encore plus intéressant, si je retire le pg gem du Gemfile mais le laisse installé, tout fonctionne bien. La minute où je l'ai remis dans le Gemfile, l'accident se produit à nouveau.

Deux questioins, alors: a) Quelqu'un at-il vu? b) Que fait le Gemfile qui cause le crash même si la simple présence du pg gem ne le cause pas?

Le code qui fait le message ressemble à ceci (dès la sortie du kit de développement PayPal):

 
# def pay 
     path = "/nvp/" 
     data = "...." 
     server = "api-3t.sandbox.paypal.com" 
     port = 443 
     header = {"Content-Type" => "html/text"} 

     http = Net::HTTP.new(server, port) 
     http.use_ssl = true 
     http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

     resp = http.post2(path, data, header) 

     @code = resp.code 
    end 

Voici la sortie de l'accident quand il se produit:

 
    -- Ruby level backtrace information ---------------------------------------- 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread' 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run' 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-1.2.1/lib/rack/handler/webrick.rb:52:in `service' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-1.2.1/lib/rack/content_length.rb:13:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/railties-3.0.3/lib/rails/rack/log_tailer.rb:14:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/railties-3.0.3/lib/rails/application.rb:77:in `method_missing' 
/Users/aehven/.rvm/gems/[email protected]/gems/railties-3.0.3/lib/rails/application.rb:168:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/middleware/static.rb:30:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-1.2.1/lib/rack/lock.rb:11:in `call' 
:10:in `synchronize' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-1.2.1/lib/rack/lock.rb:11:in `block in call' 
/Users/aehven/.rvm/gems/[email protected]/gems/activesupport-3.0.3/lib/active_support/cache/strategy/local_cache.rb:72:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-1.2.1/lib/rack/runtime.rb:17:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/railties-3.0.3/lib/rails/rack/logger.rb:13:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/middleware/show_exceptions.rb:46:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/middleware/remote_ip.rb:48:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-1.2.1/lib/rack/sendfile.rb:107:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/middleware/callbacks.rb:44:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:415:in `_run_call_callbacks' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/middleware/callbacks.rb:46:in `block in call' 
/Users/aehven/.rvm/gems/[email protected]/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:353:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/activerecord-3.0.3/lib/active_record/query_cache.rb:31:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/activerecord-3.0.3/lib/active_record/query_cache.rb:12:in `cache' 
/Users/aehven/.rvm/gems/[email protected]/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/query_cache.rb:28:in `cache' 
/Users/aehven/.rvm/gems/[email protected]/gems/activerecord-3.0.3/lib/active_record/query_cache.rb:32:in `block in call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/middleware/cookies.rb:295:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/middleware/session/abstract_store.rb:149:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/middleware/flash.rb:182:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/middleware/params_parser.rb:21:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-1.2.1/lib/rack/methodoverride.rb:24:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/middleware/head.rb:14:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/middleware/best_standards_support.rb:17:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:492:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-mount-0.6.13/lib/rack/mount/route_set.rb:139:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-mount-0.6.13/lib/rack/mount/code_generation.rb:92:in `recognize' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-mount-0.6.13/lib/rack/mount/code_generation.rb:68:in `optimized_each' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-mount-0.6.13/lib/rack/mount/code_generation.rb:93:in `block in recognize' 
/Users/aehven/.rvm/gems/[email protected]/gems/rack-mount-0.6.13/lib/rack/mount/route_set.rb:148:in `block in call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:27:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:62:in `dispatch' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:62:in `call' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_controller/metal.rb:178:in `block in action' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_controller/metal/rack_delegation.rb:14:in `dispatch' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_controller/metal.rb:138:in `dispatch' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/abstract_controller/rendering.rb:40:in `process' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/abstract_controller/base.rb:120:in `process' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_controller/metal/rescue.rb:17:in `process_action' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_controller/metal/instrumentation.rb:29:in `process_action' 
/Users/aehven/.rvm/gems/[email protected]/gems/activesupport-3.0.3/lib/active_support/notifications.rb:52:in `instrument' 
/Users/aehven/.rvm/gems/[email protected]/gems/activesupport-3.0.3/lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
/Users/aehven/.rvm/gems/[email protected]/gems/activesupport-3.0.3/lib/active_support/notifications.rb:52:in `block in instrument' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_controller/metal/instrumentation.rb:30:in `block in process_action' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/abstract_controller/callbacks.rb:17:in `process_action' 
/Users/aehven/.rvm/gems/[email protected]/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:93:in `run_callbacks' 
/Users/aehven/.rvm/gems/[email protected]/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:409:in `_run_process_action_callbacks' 
/Users/aehven/.rvm/gems/[email protected]/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:435:in `_run__1503509404736522407__process_action__285881469255263509__callbacks' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/abstract_controller/callbacks.rb:18:in `block in process_action' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_controller/metal/rendering.rb:11:in `process_action' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/abstract_controller/base.rb:151:in `process_action' 
/Users/aehven/.rvm/gems/[email protected]/gems/actionpack-3.0.3/lib/action_controller/metal/implicit_render.rb:4:in `send_action' 
/Users/aehven/Work/Projects/Pico-Tesla/Workspace/trunk/app/controllers/payments_controller.rb:54:in `do_DCC' 
/Users/aehven/Work/Projects/Pico-Tesla/Workspace/trunk/vendor/plugins/PayPalSDK/lib/caller.rb:70:in `call' 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:978:in `post' 
/Users/aehven/.rvm/gems/[email protected]/gems/rest-client-1.6.1/lib/restclient/net_http_ext.rb:17:in `request' 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:1168:in `request' 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:626:in `start' 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:637:in `do_start' 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:678:in `connect' 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/timeout.rb:87:in `timeout' 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/timeout.rb:44:in `timeout' 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:678:in `block in connect' 
/Users/aehven/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:678:in `connect' 
- 

Répondre

2

Vous presque certainement avoir votre bibliothèque client PostgreSQL (libpq) compilée avec une version différente d'OpenSSL que l'extension OpenSSL de votre bibliothèque Ruby. Je pense que la raison pour laquelle retirer 'pg' des travaux de gemfile est que libssl de Ruby a une chance de charger d'abord.

Pour résoudre ce problème, compilez tout vous utilisez qui nécessite SSL contre la même version de OpenSSL.