首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ActiveRecord::StatementInvalid无效: PG InFailedSqlTransaction

ActiveRecord::StatementInvalid无效: PG InFailedSqlTransaction
EN

Stack Overflow用户
提问于 2014-01-15 21:05:48
回答 8查看 43.7K关注 0票数 76

我正在尝试创建ActiveRecord Object.But,创建时遇到此错误。

(0.1ms)  ROLLBACK
ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: ERROR:  current transaction is       aborted, commands ignored until end of transaction block

对这个问题有任何想法的人。

EN

回答 8

Stack Overflow用户

发布于 2014-02-14 20:52:33

我有这个问题。只需重新启动Rails Server,它就应该可以工作了

票数 86
EN

Stack Overflow用户

发布于 2014-03-13 23:23:50

这个问题是在我的测试环境中发生的,并且是由于每个测试都封装在自己的事务中而导致的。

我使用的是javascript gem,并对其进行了配置,以便在使用database_cleaner的情况下不将测试包装在事务中。因此,为了解决这个问题,我在导致这个问题的每个规范中添加了js: true。(尽管规范实际上并没有使用javascript,但这是确保测试不会被包装在事务中的最方便的方法。我确信有更少的黑客方式来做到这一点)。

以下是来自spec/support/database_cleaner.rb的database_cleaner配置,以供参考

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.clean_with :deletion
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, :js => true) do
    DatabaseCleaner.strategy = :deletion
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

end

如果您没有使用database_cleaner,那么测试将被包装在事务中的原因可能是因为在spec/spec_helper.rb中将use_transactional_fixtures选项设置为true。尝试将其设置为false。

票数 15
EN

Stack Overflow用户

发布于 2014-06-25 10:02:59

你可以看到postgresql日志中到底发生了什么,我花了很多时间深入研究这个问题,最后发现我们滥用upsert gem导致了PG错误,只有在postgresql日志中才有发生情况的真实信息

https://github.com/seamusabshere/upsert/issues/39

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21138207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档