我正在尝试创建ActiveRecord Object.But,创建时遇到此错误。
(0.1ms) ROLLBACK
ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block
对这个问题有任何想法的人。
发布于 2014-02-14 20:52:33
我有这个问题。只需重新启动Rails Server,它就应该可以工作了
发布于 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。
发布于 2014-06-25 10:02:59
你可以看到postgresql日志中到底发生了什么,我花了很多时间深入研究这个问题,最后发现我们滥用upsert gem导致了PG错误,只有在postgresql日志中才有发生情况的真实信息
https://stackoverflow.com/questions/21138207
复制相似问题