【问题标题】:heroku current transaction is abortedheroku 当前交易被中止
【发布时间】:2010-01-24 17:08:55
【问题描述】:

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

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

ActiveRecord::StatementInvalid (PGError:错误:当前事务 被中止,命令被忽略直到结束 事务块:SELECT * FROM "用户" WHERE ("用户"."密码" = E'' AND "users"."userid" = E'') LIMIT 1): app/models/user.rb:5:in authenticate'
app/controllers/admin_controller.rb:6:in
login'

在我的控制器中,我只是在执行以下操作:

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

在用户模型中:

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

错误消息使我相信某些连接处于挂起状态并且从未关闭。 ruby 应用程序中是否出现过这种情况?

在我的应用程序中,我也有很多地方使用 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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    由于我认为是在尝试插入 utf-8 字符时出现该错误,所以我猜您的密码可能包含外来字符。顺便说一句:你应该转义你使用的 sql-string,嵌入 params[:anything] 是 baaaad。

    【讨论】:

      【解决方案2】:

      我遇到了类似的错误,这部分 Rails 文档有所帮助:

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

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

      ...

      【讨论】:

        【解决方案3】:

        我刚刚重新启动了应用程序,一切都恢复正常

        heroku restart
        

        希望对您有所帮助!

        【讨论】:

          猜你喜欢
          • 2012-09-18
          • 1970-01-01
          • 2020-07-30
          • 2023-02-13
          • 2021-08-30
          • 2010-11-05
          • 2023-01-14
          • 2021-07-19
          相关资源
          最近更新 更多