heroku当前事务已中止

时间:2010-01-24 17:08:56

标签: ruby-on-rails

我在heroku上运行了一个小的免费应用程序。

间歇性地停止工作,并在屏幕上显示默认的heroku错误页面。当我查看日志时,我看到以下内容:

  

的ActiveRecord :: StatementInvalid   (PGError:错误:当前交易   中止,命令被忽略直到结束   事务块:SELECT * FROM   “users”WHERE(“users”。“password”=   E''和'用户'。“userid”= E'')LIMIT   1):app / models / user.rb:5:in   authenticate'
app/controllers/admin_controller.rb:6:in
登录

在我的控制器中我正在做以下事情:

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

并在用户模型中:

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

错误消息让我相信某些连接处于挂起状态并且永远不会关闭。在红宝石应用程序中这是一个案例吗?

在我的应用程序中,还有许多我使用find_by_sql的地方。这是否要求我们明确关闭连接?

像这样:

@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

3 个答案:

答案 0 :(得分:0)

由于我在尝试插入utf-8字符时的想法,我得到了这个错误,所以我猜你的密码可能有异国情调的字符。 BTW:你应该转义你使用的sql-string,嵌入params [:anything]是baaaad。

答案 1 :(得分:0)

我遇到了类似的错误,Rails文档的这一点有帮助:

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

  

警告:不应该捕获ActiveRecord :: StatementInvalid   事务块内的异常。的ActiveRecord :: StatementInvalid   异常表示在数据库级别发生错误   例如,违反了唯一约束。在一些数据库上   系统,如PostgreSQL,事务中的数据库错误   导致整个事务在重新启动之前变得不可用   从最开始。这是一个演示问题的例子:

...

答案 2 :(得分:0)

我刚刚重新启动了应用程序,一切都回归正确

heroku restart

希望它会有所帮助!