2012-09-25 21 views
20

Utilizzo: Rails 3.0.3 e Heroku con Postgresql.PGError: ERRORE: la transazione corrente viene interrotta

ho ricevuto numerose eccezioni come questa:

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' 

verificano althroughout mia app, ma sempre quando mi esibisco come in questo caso

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

o simile, super semplice, database- richieste.

La mia lista di gemme (da quando ho caricato 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) 

fatti

  • Gli errori sono intermittenti e non li possono riprodursi.
  • sembra accadere al massimo del tempo in cui i bot dei motori di ricerca cercano di accedere alla pagina

Domande

Q1. Non so nemmeno da dove cominciare a risolvere questo problema (quali altre parti del mio codice avresti bisogno?). Quali dovrebbero essere i miei primi passi?

Q2. Ci sono problemi noti con Rails 3.0.3 e Postgresql?

  • Cos'altro ti serve per risolvere i problemi?
+0

Rimuovere ':' prima di 'params', dovrebbe leggere' calculation_type = CalculationType.find (params [: id]) ' – nmott

+0

Grazie, ma in realtà era solo un tipo-o nel testo (non l'ho fatto copia e incolla) in modo che non sia effettivamente presente nel codice. L'ho rimosso dalla mia domanda ora. – Christoffer

+0

se si sta utilizzando ActiveRecord :: Transaction, quindi checkout http://apidock.com/rails/ActiveRecord/Transactions/ClassMethods –

risposta

14

Questo errore non è mai il tuo vero problema. Si verifica perché si invia un'istruzione in una transazione che è già fallita a causa di un errore upstream. Se vedi molti di questi errori, vuoi tornare nel tuo log per trovare il primo errore nello stream e sarà un errore diverso.

Trova questo e risolvilo. Nota che questo significa solo che stai continuando le transazioni dopo altri errori. Gli altri errori sono dove si trovano i problemi.

+10

Avevo bisogno di eseguire rake db: test: prepararsi a risolvere il mio problema. Spero che questo aiuti qualcuno. –

+1

Conosco il motivo. Ma come passare? Come dire solo alla transazione di fermarsi e uscire? Non ho bisogno di cercare la ragione. Basta uscire dal suo stato. – Green

0

È possibile eseguire un CalculationType.all o CalculationType.first senza errori?

Se è possibile accedere ad alcuni dati da questo modello, quindi reindexing vostra tavola potrebbe risolvere il problema, provate questo:

REINDEX TABLE <table_name> 

o in console rotaie:

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

Ho avuto un problema simile qualche tempo fa, spero che aiuti.

18

Ho appena riavviato il mio server. Questo ha annullato la transazione.

Problemi correlati