3

我看到了这个帖子:

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 时不会发生

http://pastie.org/8063577

编辑:不是设计问题。我以为是,但事实证明我只是在夹具中创建另一个对象,而不是在测试代码中。

所以,我可以整天在夹具中创建设计用户或任何其他类型的对象,但如果我尝试在单元测试中创建一个,我会收到保存点错误。尝试在单元测试中保存夹具也是如此。

4

1 回答 1

0

您的问题很可能与您更新了本地 sqlite 但之后您没有重新安装 sqlite3 gem 有关。

我建议您按照以下步骤操作:

  1. gem 'sqlite3'从您的 Gemfile 中删除相应的行
  2. bundle install
  3. gem uninstall sqlite3
  4. 将该行返回gem 'sqlite3'到您的 Gemfile
  5. 再跑bundle install一次

如果你只是简单地gem uninstall然后bundle install,它将安装相同的版本和依赖项记录在Gemfile.lock. 但是由于您现在使用的是不同且更新的本地版本,因此如果需要,允许 Bundler 安装新版本会更安全。

于 2013-06-20T14:48:11.923 回答