我看到了这个帖子:
Rails/ActiveRecord/SQLite3:无法在测试环境中保存记录
在将我的 sqlite 版本升级到最新版本(3.7.17)后,我仍然收到以下错误:
ActiveRecord::StatementInvalid: SQLite3::SQLException: 在“SAVEPOINT”附近:语法错误:SAVEPOINT active_record_1
任何时候我都试图创造任何东西。如果我所做的只是加载我的固定装置,那么一切都很好。
我已经通过运行“rails db”确认 rails 正在使用更新的 sqlite3 版本。
在我的开发环境中,我可以整天无错误地创建对象(我什至可以让一个对象在创建后创建另一个对象)。
我的测试环境发生这种情况有什么特别之处?我该如何解决?
编辑:
如果我删除我的测试数据库,然后重做 rake:db:create 和 rake:db:migrate,我仍然会遇到同样的问题。
进行“rails 控制台测试”让我可以很好地使用测试环境,并且我可以整天创建对象并查看现有的固定装置。只有当我输入“rake test:units”时我才会收到错误...(最初我有错误,但一个错误是合法的(我不知道为什么我没有在开发环境中得到它,并且适配器错误是因为显然您不应该执行“rails console RAILS_ENV="test",因此它正在为名为“RAILS_ENV=test”的环境寻找适配器)
编辑:当我输入“gem uninstall sqlite3”时,它会卸载。当我然后键入“捆绑安装”时,重新安装时出现问题......现在正在处理它。
/home/jenny/.rvm/rubies/ruby-1.9.3-p0/bin/ruby extconf.rb --with-sqlite3-dir=/usr/local/bin/sqlite3 checking for sqlite3.h... *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check
mkmf.log 文件以获取更多详细信息。您可能需要配置选项。
如果我单独键入“gem install sqlite3”,它工作得很好,然后“捆绑安装”它工作。但是,“rake test:units”也有同样的错误。
编辑:当我输入“which sqlite3”时,它会打印出“/usr/local/bin/sqlite3”
我什至不知道 sqlite3 标头是一个东西,所以我怀疑我安装了它们。我会尝试弄清楚如何确认这一点,看看它是否有帮助。
编辑:
我在主站点上看不到任何地方可以下载 sqlite3 标头...只是源代码和预编译的 linux 二进制文件。源中似乎没有特殊的标头,但即使有,它不会包含在预编译的二进制文件中吗?
编辑:链接到捆绑器 sqlite3 安装错误,当我手动安装 gem 时不会发生
编辑:不是设计问题。我以为是,但事实证明我只是在夹具中创建另一个对象,而不是在测试代码中。
所以,我可以整天在夹具中创建设计用户或任何其他类型的对象,但如果我尝试在单元测试中创建一个,我会收到保存点错误。尝试在单元测试中保存夹具也是如此。