2012-09-25 23 views
20

Usando: Rails 3.0.3 y Heroku con Postgresql.PGError: ERROR: la transacción actual se cancela

he estado recibiendo numerosas excepciones como este:

A ActiveRecord::StatementInvalid occurred in home#index: 

    PGError: ERROR: current transaction is aborted, commands ignored until end of transaction block 
: SELECT "calculation_types".* FROM "calculation_types" 
    .bundle/gems/ruby/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:202:in `rescue in log' 

occuring althroughout mi aplicación, pero siempre cuando realizo como en este caso

calculation_type = CalculationType.find(params[:id]) 

o similares, super simple, base de datos- peticiones.

Mi lista de piedras preciosas (desde cuando he subido a Heroku):

Installing rake (0.9.2.2) 
    Installing abstract (1.0.0) 
    Installing activesupport (3.0.3) 
    Installing builder (2.1.2) 
    Installing i18n (0.6.1) 
    Installing activemodel (3.0.3) 
    Installing erubis (2.6.6) 
    Installing rack (1.2.5) 
    Installing rack-mount (0.6.14) 
    Installing rack-test (0.5.7) 
    Installing tzinfo (0.3.33) 
    Installing actionpack (3.0.3) 
    Installing mime-types (1.19) 
    Installing polyglot (0.3.3) 
    Installing treetop (1.4.10) 
    Installing mail (2.2.19) 
    Installing actionmailer (3.0.3) 
    Installing arel (2.0.10) 
    Installing activerecord (3.0.3) 
    Installing activeresource (3.0.3) 
    Installing acts_as_tree_rails3 (0.1.0) 
    Installing breadcrumbs_on_rails (2.2.0) 
    Installing yamler (0.1.0) 
    Installing configatron (2.9.1) 
    Installing daemons (1.1.9) 
    Installing eventmachine (1.0.0) with native extensions 
    Installing exception_notification (2.4.1) 
    Installing friendly_id (4.0.0.beta12) 
    Installing i18n_routing (0.6.1) 
    Installing thor (0.14.6) 
    Installing railties (3.0.3) 
    Installing jquery-rails (1.0.19) 
    Installing pg (0.14.1) with native extensions 
    Installing postgres-pr (0.6.3) 
    Installing rack-rewrite (1.0.2) 
    Installing rack-timeout (0.0.3) 
    Using bundler (1.0.7) 
    Installing rails (3.0.3) 
    Installing thin (1.5.0) with native extensions 
    Installing time_diff (0.2.2) 

Datos

  • Los errores son intermitentes y no puedo reproducirlos.
  • Parece ocurrir en la mayoría de las veces cuando los robots de los motores de búsqueda tratan de acceder a la página

Preguntas

Q1. Ni siquiera sé por dónde empezar a solucionar problemas de esto (¿qué otras partes de mi código necesitarías?). ¿Cuáles deberían ser mis primeros pasos?

Q2. ¿Hay algún problema conocido con Rails 3.0.3 y Postgresql?

  • ¿Qué más necesitas para ayudarme a solucionar el problema?
+0

Quite el ':' antes de 'params', debería leer' calculate_type = CalculationType.find (params [: id]) ' – nmott

+0

Gracias, pero en realidad solo era un tipo-o en el texto (no lo hice copiar y pegar) por lo que realmente no existe en el código. Lo he eliminado de mi pregunta ahora. – Christoffer

+0

si está usando ActiveRecord :: Transaction luego ingrese http://apidock.com/rails/ActiveRecord/Transactions/ClassMethods –

Respuesta

14

Este error nunca es tu problema real. Se produce porque envía una declaración en una transacción que ya ha fallado debido a un error de subida. Si ve muchos de estos errores, quiere volver al registro para encontrar el primer error en la transmisión, y será un error diferente.

Encuentra esto y corrígelo. Tenga en cuenta que esto solo significa que continúa transacciones después de otros errores. Los otros errores son donde radican los problemas.

+10

Necesitaba ejecutar rake db: prueba: prepárese para solucionar mi problema. Espero que esto ayude a alguien. –

+1

Sé el motivo. ¿Pero cómo pasarlo? ¿Cómo decirle a la transacción que solo se detenga y salga? No necesito buscar el motivo. Solo sal de su estado. – Green

0

¿Puede realizar un CalculationType.all o CalculationType.first sin errores?

Si puede acceder a algunos datos de este modelo, a continuación, reindexing su mesa podría solucionar el problema, intente lo siguiente:

REINDEX TABLE <table_name> 

o en la consola rieles:

ActiveRecord::Base.connection.execute("reindex table <table_name>") 

tuve un problema similar Hace un tiempo, espero que ayude.

18

Acabo de reiniciar el servidor. Esto canceló la transacción.

Cuestiones relacionadas