【问题标题】:Could not find table (following upgrade to newer Ruby and Rails versions)找不到表(升级到较新的 Ruby 和 Rails 版本后)
【发布时间】:2018-06-12 22:06:15
【问题描述】:

我有一个曾经可以工作的应用程序(基于 this tutorial)。但是,我现在收到错误:

找不到表“用户”

我必须升级我正在使用的 Ruby 版本(从 2.0.0 到 2.4.4)。使用较新的 Ruby 版本,我还必须使用该应用程序使用的一些 gem 的较新版本。特别是管理应用程序数据库的新版本 sqlite3。

新的 sqlite3 是找不到表的原因吗?我能做些什么来解决这个错误?我假设升级 gem 版本并没有删除表之前包含的数据...

【问题讨论】:

  • 你可以使用简单的命令RAILS_ENV=development rails db:setup代替RAILS_ENV=development rails db:drop db:create db:migrate db:seed

标签: ruby-on-rails ruby sqlite


【解决方案1】:

如果您使用的是 SQLite 并且没有 db/development.sqlite3 文件,那么它发生了一些事情,您将不得不重新创建您的数据库。如果这是开发环境并且可以清理数据库,请运行以下命令:

RAILS_ENV=development rails db:drop db:create db:migrate db:seed

这将重新创建数据库,运行迁移和seeds.rb 文件。

注意:默认情况下,Rails 创建 .gitignore 文件,不包括 .sqlite3 文件。这将阻止对 SQLite 数据库进行版本控制。

【讨论】:

  • 哦。我 git 克隆了存储库,所以我的 db/development.sqlite3 确实是空的!我设法获得了原始文件的副本并将其复制并粘贴在那里。我现在收到Cannot visit Integer 错误。四处搜索显示error might be due to a Rails version incompatibility。这是否意味着db/development.sqlite3 文件的内容不是通用的,而是特定于 Rails/Ruby 版本的,我不能简单地复制和粘贴? IE。有没有办法将我的旧数据与较新的 gem 一起使用?
  • @JetBlue 数据库文件通常被忽略,因为它是数据。您可以使用 db:dump 并重新加载它,但通常您不希望在二进制 DB 数据周围随机播放,因为文件格式可能会发生变化等。
  • @DaveNewton 谢谢,db:dump 怎么办?
  • 原来Cannot visit Integer错误与数据库无关。
  • @JetBlue 我不记得了。它可能是一颗宝石。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-24
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
相关资源
最近更新 更多