Rails schema.rb中sqlite_sp_functions的目的是什么?

时间:2014-05-20 08:59:39

标签: ruby-on-rails ruby ruby-on-rails-4

some others一样,我遇到错误

  

“ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:对象名称   保留供内部使用:sqlite_sp_functions:CREATE TABLE   “sqlite_sp_functions”(“名称”文字,“文字”文字)“

在Rails项目上运行rake test时。

schema.rb中的违规行是:

create_table "sqlite_sp_functions", id: false, force: true do |t|
  t.text "name"
  t.text "text"
end

关于此前一个查询的建议涉及编辑schema.rb或删除该文件&重新生成它,但schema.rb(以及违规代码)会在每次迁移时重新生成(另外,我不想删除Rails生成的代码而不知道其含义),因此这不是一个令人满意的解决方案。

那么sqlite_sp_functions表是什么,以及如何让Rails生成一个不会破坏项目schema.rb的{​​{1}}文件?

2 个答案:

答案 0 :(得分:1)

根据https://stackoverflow.com/a/25077833/601782

  

将以下配置行添加到config/application.rbconfig/environments/development.rb

ActiveRecord::SchemaDumper.ignore_tables = /^sqlite_*/
     

这将忽略架构转储期间数据库中以“sqlite_”开头的所有表。

答案 1 :(得分:0)

尝试从schema.rb删除有问题的行,然后发出:

RAILS_ENV=test rake db:reset

完全核对您的测试数据库,但您无论如何都不应该关心。您不应该为测试环境运行迁移。对于保存数据的环境(例如生产和有时暂存/开发),迁移意味着是小的(可逆的)步骤。

处理测试数据库的首选方法是使用db:schema:load作为测试例程的一部分,这当然会删除所有数据库数据。

同样:请不要在开发模式下尝试此操作(如果您有手动设置的数据)并且肯定不在生产中

除此之外,您可以从SQLite测试数据库中删除整个sqlite_sp_functions表,并完全消除该问题。我不认为这与Rails有任何关系(Rails也不会产生这种情况)。我相信SQLite创建了这个表,你的架构只是把它拿起来(应该这样)。显然,该表用于保存某种存储过程。