2010-01-24 4 views
1

J'ai une petite application gratuite fonctionnant sur heroku.transaction actuelle heroku est avortée

par intermittence l'application cesse de fonctionner et affiche la page d'erreur heroku par défaut sur l'écran. quand je vérifie les journaux que je vois ce qui suit:

ActiveRecord::StatementInvalid (PGError: ERROR: current transaction is aborted, commands ignored until end of transaction block : SELECT * FROM "users" WHERE ("users"."password" = E'' AND "users"."userid" = E'') LIMIT 1): app/models/user.rb:5:in authenticate'
app/controllers/admin_controller.rb:6:in
login'

dans mon contrôleur je ne fais que ce qui suit:

user = User.authenticate(params[:storeid], params[:password]) 

et dans le modèle de l'utilisateur:

def self.authenticate(userid, password) 
    user = self.find_by_userid_and_password(userid, password) 
    user 
    end 

Les messages d'erreur me conduit croire que certaines connexions restent suspendues et ne sont jamais fermées. Est-ce toujours un cas dans une application de ruby?

Dans mon application, il existe également de nombreux endroits où j'utilise find_by_sql. cela nous oblige-t-il à fermer explicitement les connexions?

Comme ceci:

@sqlstmmt1 = "INSERT INTO addresses (\"line1\", \"line2\", city, state, zip, county) VALUES ('" + params[:line1] + "', '"+ params[:line2] + "', '"+params[:city]+ "', '" + params[:state] + "', '" + params[:zip]+ "', '" + params[:county]+"')" 
sql = ActiveRecord::Base.connection(); 
sql.begin_db_transaction 

Répondre

0

je reçois cette erreur en raison de ce que je pense est en essayant d'insérer des caractères UTF-8, donc je suppose que votre mot de passe pourrait avoir des caractères exotiques. BTW: Vous devez échapper la chaîne sql que vous utilisez, l'intégration des paramètres [: anything] est baaaad.

0

je recevais une erreur semblable et ce bit de documentation Rails a aidé:

http://apidock.com/rails/ActiveRecord/Transactions/ClassMethods

Warning: one should not catch ActiveRecord::StatementInvalid exceptions inside a transaction block. ActiveRecord::StatementInvalid exceptions indicate that an error occurred at the database level, for example when a unique constraint is violated. On some database systems, such as PostgreSQL, database errors inside a transaction cause the entire transaction to become unusable until it’s restarted from the beginning. Here is an example which demonstrates the problem:

...

0

Je vient de relancer l'application et tout va arrière droit

heroku restart 

J'espère que cela aidera!