我在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
答案 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
希望它会有所帮助!