2012-04-01 9 views
14

No sé lo suficiente de Postgres para comprender el mensaje.Error de Postgres en Heroku con Resque

PG::Error: SSL error: decryption failed or bad record mac : SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = '"users"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum 

Y aquí es la pila de llamadas consiguió del backend resque

/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1139:in `async_exec' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1139:in `exec_no_cache' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:663:in `block in exec_query' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log' 
/app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.2/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:662:in `exec_query' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1264:in `column_definitions' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:858:in `columns' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/connection_adapters/schema_cache.rb:12:in `block in initialize' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:228:in `yield' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:228:in `default' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:228:in `columns' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/model_schema.rb:237:in `columns_hash' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/relation/delegation.rb:7:in `columns_hash' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/relation/finder_methods.rb:330:in `find_one' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/relation/finder_methods.rb:311:in `find_with_ids' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/relation/finder_methods.rb:107:in `find' 
/app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.2/lib/active_record/querying.rb:5:in `find' 
/app/app/workers/compute_worker.rb:5:in `perform' 

Explicación: Mi trabajador sólo está haciendo algunas operaciones de escritura en las bases de datos. Nada complicado. Cuando ejecuto la tarea del trabajador por primera vez, funciona, y la segunda vez falla con el mensaje anterior. Si reinicio el trabajador, solo funcionará la primera vez. ya corro

heroku pg:restart 
heroku db:restart 
heroku db:migrate 

... sin éxito.

En mi computadora local (usando mysql) funciona perfectamente. Alguna idea ?

+0

Tome un vistazo a sus tipos de columna en MySQL. Tal vez no has especificado una columna. He tenido un error similar (hace mucho tiempo) –

+0

¿Estás usando los grifos de gemas? –

+0

Esa consulta es lo que ActiveRecord usa para descubrir la estructura de una tabla de PostgreSQL. El error ha [apareció en otro lugar en SO] (http://stackoverflow.com/questions/9108680/rails-postgresql-ssl-decryption-failure). –

Respuesta

14

Gracias a los comentarios de "Rails beginner" y "mu is too short" Encontré la solución.

¡He agregado esto a un inicializador y lo hice!

Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection } 
+0

Realmente necesitaba before_fork para mi problema, por lo que mi solución terminó así. –

+0

Arkan - esta solución salvó mi vida. Bueno, al menos mi fin de semana. – rockusbacchus

7

que tenían el mismo problema, pero para resolverlo mi aplicación requiere realmente una before_fork y no un after_fork. Espero que esto ayude a alguien.

Resque.before_fork = Proc.new { ActiveRecord::Base.establish_connection } 
+1

Este fue el caso para mí en heroku – Bnicholas

2
Resque.before_fork = Proc.new { 
    ActiveRecord::ActiveRecord::Base.verify_active_connections! 
} 

sería aún mejor

+0

[#verify_active_connections! fue eliminado] (https://github.com/resque/resque/issues/1098). En Rails 4 puedes usar ActiveRecord :: Base.clear_active_connections! – MegaTux

4

Este article from heroku explica cómo conectar y desconectar las conexiones correctamente para resque:

Resque.before_fork do 
    defined?(ActiveRecord::Base) and 
    ActiveRecord::Base.connection.disconnect! 
end 

Resque.after_fork do 
    defined?(ActiveRecord::Base) and 
    ActiveRecord::Base.establish_connection 
end 
Cuestiones relacionadas