通过 DataMapper 来自 SQLite 内存数据库的 No Such Table 错误

2024-03-28

我有一个 Ruby 程序,它使用 DataMapper 作为 ORM 与内存中的 SQLite DB 进行通信。这一直工作得很好,但是我最近刚刚添加了一个新的 DM 类和相应的表。令我惊讶的是,现在在 auto_migrate 过程中事情发生了爆炸!

这是 DataMapper 生成的 SQL:

~ (0.000390) PRAGMA table_info("sensationd_channels")
~ (0.000010) PRAGMA table_info("sensationd_commands")
~ (0.000009) PRAGMA table_info("sensationd_configurations")
~ (0.000052) PRAGMA table_info("sensationd_measurements")
~ (0.000028) SELECT sqlite_version(*)
~ (0.000035) DROP TABLE IF EXISTS "sensationd_channels"
~ (0.000009) PRAGMA table_info("sensationd_channels")
~ (0.000423) CREATE TABLE "sensationd_channels" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "channel" INTEGER NOT NULL, "name" VARCHAR(50), "precision" INTEGER DEFAULT 11, "gain" INTEGER DEFAULT 1, "differential" BOOLEAN DEFAULT 'f', "configuration_id" INTEGER NOT NULL)
~ (0.000191) CREATE INDEX "index_sensationd_channels_configuration" ON "sensationd_channels" ("configuration_id")
~ (0.000015) DROP TABLE IF EXISTS "sensationd_commands"
~ (0.000009) PRAGMA table_info("sensationd_commands")
~ (0.000153) CREATE TABLE "sensationd_commands" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "action" INTEGER DEFAULT 1, "complete" BOOLEAN DEFAULT 'f', "issued_at" TIMESTAMP, "completed_at" TIMESTAMP)
~ (0.000015) DROP TABLE IF EXISTS "sensationd_configurations"
~ (0.000009) PRAGMA table_info("sensationd_configurations")
~ (0.000155) CREATE TABLE "sensationd_configurations" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "created_on" TIMESTAMP, "modified_on" TIMESTAMP, "name" VARCHAR(50) NOT NULL, "active" BOOLEAN)
~ (0.000015) DROP TABLE IF EXISTS "sensationd_measurements"
~ (0.000009) PRAGMA table_info("sensationd_measurements")
~ (0.000152) CREATE TABLE "sensationd_measurements" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "timestamp" TIMESTAMP, "measurement" VARCHAR(65535) NOT NULL, "channel_id" INTEGER NOT NULL, "channel_configuration_id" INTEGER NOT NULL)
~ (0.000175) CREATE INDEX "index_sensationd_measurements_channel" ON "sensationd_measurements" ("channel_id", "channel_configuration_id")
~ (0.000083) SELECT "id", "created_on", "modified_on", "name", "active" FROM "sensationd_configurations" WHERE "active" = 't' ORDER BY "id" LIMIT 1
~ (0.000073) INSERT INTO "sensationd_configurations" ("created_on", "modified_on", "name", "active") VALUES ('2011-08-01T12:36:18-07:00', '2011-08-01T12:36:18-07:00', 'Test U6-Pro Configuration, differential.', 't')
~ (0.000109) SELECT "id", "action", "complete", "issued_at", "completed_at" FROM "sensationd_commands" ORDER BY "issued_at" DESC LIMIT 1
~ (0.000086) INSERT INTO "sensationd_channels" ("channel", "name", "precision", "gain", "differential", "configuration_id") VALUES (0, '0', 11, 0, 't', 1)
~ no such table: sensationd_commands (code: 1, sql state: , query: SELECT "id", "action", "complete", "issued_at", "completed_at" FROM "sensationd_commands" ORDER BY "issued_at" DESC LIMIT 1, uri: sqlite3::memory:?scheme=sqlite&user=&password=&host=&port=&query=&fragment=&adapter=sqlite3&path=:memory:)

看起来它创建表的过程很顺利,但是几行之后就找不到它了。我认为我错误配置了数据库连接,除了找到其他表并且工作正常之外。

正在使用的软件:

  • 通过 RVM 的 Ruby 1.9.2p289
  • SQLite3 @3.7.7.1 通过 MacPorts
  • DataMapper gem v 1.1.0

有谁知道为什么会出现这种情况,我能做些什么?


我怀疑,问题是由于 DataMapper(或更准确地说,DataObjects,数据库驱动程序 DataMapper 使用)自动执行的线程池所致。数据库连接不在线程之间共享。对于像 postgresql 或 mysql 甚至 sqlite3 这样的“文件支持”数据库来说,这很好(甚至是有益的)。对于 sqlite3 的内存存储,连接is数据库。因此,其他线程将因这个原因而失败。此外,经过一段时间的不活动(大约 1 分钟?)后,线程将被清理,数据库也将消失。

如果是这样,我不确定是否有简单的解决方法。您也许可以修改 do_sqlite3 来避免这种情况。另一种基本上应该同样快的替代方案是在 ramdrive 上使用文件支持的 sqlite3 DB。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 DataMapper 来自 SQLite 内存数据库的 No Such Table 错误 的相关文章

  • Jekyll 服务错误:找不到 gem jekyll (>= 0.a) (Gem::GemNotFoundException

    做的时候sudo jekyll serve我收到以下错误 Users myusername rvm rubies ruby 2 4 2 lib ruby site ruby 2 4 0 rubygems rb 271 in find spe
  • 使用 %w[] 创建包含空字符串的数组

    创建包含空字符串的数组 a b c 不是一个空格字符串 使用 W我可以用 W a b c 我也可以连接数组 但是是否可以使用空字符串创建数组 w 几个选项 W a b c z W a b c lt lt 我知道这没有使用 w 语法 但为了更
  • Ruby - 乘法问题

    我的输出是这样的 ruby 1 9 2 p290 011 gt 2 32 3 gt 6 959999999999999 我记得有一天在另一台机器上我得到了它就像 2 32 3 6 我的错误是什么 非常感谢您阅读本文 如果您确实想向下舍入为整
  • 在 Sinatra 中缓存响应的最佳方式?

    我正在使用我用 Sinatra 制作的 API 构建一个简单的应用程序 该 API 返回一些 JSON 这是相当多的 JSON 我的应用程序的 API 依赖于对其他 API 的数百个请求 我大概可以将结果缓存 5 天左右 数据完全没有问题
  • Bundler 似乎无法通过 Rbenv 找到正确的 Ruby

    多年来我一直使用 RVM 作为 Ruby 版本管理器 但由于其简单性 我想改用 rbenv 但是我在部署时发现了一些奇怪的问题 这似乎是错误的地方 env RBENV ROOT home deploy rbenv PATH home dep
  • 单表继承发现问题

    我有以下3个rails类 它们都存储在一张表中 使用rails的单表继承 class Template lt ActiveRecord Base class ThingTemplate lt Template class StockThin
  • Codekit文件权限问题(只读文件系统@dir_s_mkdir - /.sass-cache)

    出现以下错误 Compiling failed with this error Errno EROFS on line 239 of System Library Frameworks Ruby framework Versions 2 6
  • 您将如何整理这个控制器逻辑?

    我在控制器中有一些逻辑 如果满足某些条件 它会设置对象的状态 if params concept consulted legal 0 params concept consulted marketing 1 concept attribut
  • Ruby 元编程,RSpec 的“应该”如何工作?

    我正在阅读 RSpec 并试图弄清楚 RSpec 的 应该 是如何实现的 有人可以帮忙解释一下这个函数的元性质是如何工作的吗 代码位于此处 http github com dchelimsky rspec blob master lib s
  • 如何使用 LDAP 进行 Ruby on Rails 身份验证? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个网络应用程序 并且我有一个使用的身份验证方法bcrypt gem它工作正常 但我想将身份验
  • 定制导轨配置部分

    为 Rails 应用程序创建自定义配置部分的最佳方法是什么 理想情况下 我希望最终结果是一个 api 调用 例如 Rails configuration foo bar Rails configuration foo baz e g Rai
  • Ruby 反向柯里化:这可能吗?

    关于 Ruby 1 9 x 中的柯里化 我一直在某些地方使用它 并且可以像基本上支持 proc 参数的默认参数一样进行翻译 p proc x y z x y z p curry 1 gt returns a lambda p curry 1
  • android sqlite 如果不存在则创建表

    创建新表时遇到一点问题 当我使用 CREATE TABLE 命令时 我的新表按应有的方式形成 但是当我退出活动时 应用程序崩溃 并且我在 logcat 中得到一个表已存在 如果我使用 CREATE TABLE IF NOT EXISTS 则
  • Mongoid 4 / MongoDB 2.4+“冻结”问题

    自从使用 Mongoid 维护与 mongodb 的连接以来 我遇到了一个奇怪的问题 我认为这最初是由于升级到 Rails 4 0 需要更新 Mongoid Moped 但我在其他基于 Rack 的应用程序 具体来说是 Sinatra 和
  • ruby 中的树结构,父子采用数组格式,没有 gem?

    我有一个数组 其中包含这样的项目列表 arr id gt 1 title gt A parent id gt nil id gt 2 title gt B parent id gt nil id gt 3 title gt A1 paren
  • 如何将命令行参数传递给 rake 任务

    我有一个 rake 任务需要将一个值插入到多个数据库中 我想从命令行或从another耙任务 我怎样才能做到这一点 您可以通过向任务调用添加符号参数来指定 rake 中的形式参数 例如 require rake task my task a
  • Rails——理解 db:migrate

    我在理解 Ruby on Rails 中的迁移时遇到了一些困难 我的应用程序中有以下两个类db migrate 目录 存储在单独的文件中 class CreateUsers lt ActiveRecord Migration def sel
  • 从 Linux bash 解析 FB-Purity 的 Firefox idb(索引数据库 API)object_data blob

    我想从 Linux bash 脚本中读取由名为 FB Purity 的特定 Firefox 插件存储的结构化数据 我找到了一个名为 mozilla firefox b8eab5j0 default storage default moz e
  • 使用 Ruby 验证 Jenkins 插件表单

    我正在用 Ruby 开发一个 Jenkins 插件 您应该能够配置连接到服务器的每个节点 以便在该节点失去与主服务器的连接时将电子邮件发送到指定的地址 EmailNodeProperty添加一个字段来输入电子邮件地址 Save an ema
  • 如何在 Ruby 中使用循环输出所有可能的组合?

    我刚刚开始学习编程 并试图编写一个输出所有可能组合的函数 到目前为止 我已经能够找到尺寸 2 的所有可能组合 但我不确定如何使代码保持开放式以处理更大尺寸的组合 某种递归会有用吗 我知道我可以使用内置的组合方法 但我只是想弄清楚如何从头开始

随机推荐

  • Apache 目录 LDAP - 分页搜索

    我一直在寻找使用 Apache Directory API 执行分页搜索的信息 但我没有找到任何示例或任何有关如何使用正确的 PagedResults 控件构建 SearchRequest 然后执行搜索的信息 你们有什么建议吗 或者知道哪里
  • TextToSpeech 改变声音

    我希望能够更改文本转语音 API 中的语音 例如更改 声音由女声转为男声 让声音更清晰 改变语速 请有人让我知道这是否可能 谢谢 您可以通过以下方式为特定字符串提供自己的转换addSpeech 不过 AFAICT 没有文档说明如何替换自己的
  • 如何构建这个项目? (jpeg 库)

    Edit 我现在正在使用http code google com p jpeg compressor http code google com p jpeg compressor 所以我不再关心让这个工作了 我下载了http ijg org
  • 从日语 IME 获取更多数据

    在我的 C 表单中 我有一个数据网格视图 我想在其中输入单词或句子的汉字和假名版本 并将它们放在不同的列中 例如 転寝 寝坊 我想要实现的是当我提交第一列时自动填充第二列 我知道有一些词典包含汉字读法 但对于句子来说它会变得复杂 而且还有很
  • 使用 VisualVM 和 JMX 进行远程监控

    我想使用 jvisualvm 或 jconsole 监视远程运行的 java spring boot 应用程序 在本地运行时 我可以在 jvisualvm 和 jconsole 中看到托管 bean 远程运行时我无法连接 我用几个不同的ja
  • 得到一个名为保留字的Oracle表,可能会出现哪些问题?

    我们刚刚外包了一个系统 乍一看我可以看到一些名称为 CASE 或 FROM 的表和字段 它是一个 Oracle 10g DB 我们将使用来自 Java Hibernate C C 的这些数据 有什么特别我们应该注意的吗 对于我在其他帖子中看
  • jQuery:一年中的一周脚本正在运行

    不久前我需要一个脚本来每周更新一些内容 我的问题在这个论坛 https stackoverflow com questions 3701276 jquery update content every week or long period
  • CMS 软件中的空白 index.html 而不是 .htaccess

    我注意到 Joomla Wordpress 和其他 CMS 在其所有子文件夹中都有空白的 index html 文件 以防止人们窥视文件夹结构 我的问题是为什么他们不能禁止使用 htaccess 文件查看文件夹 而不是将空白的 index
  • 多个 goroutine 的 Go 内存消耗

    我试图检查 Go 在 100 000 个 goroutine 上的表现如何 我编写了一个简单的程序来生成许多例程 除了打印一些公告之外什么也不做 我将 MaxStack 大小限制为仅 512 字节 但我注意到程序大小并没有随之减小 它消耗了
  • 从运行脚本阶段获取当前方案名称

    有没有办法从运行脚本阶段获取当前方案 我试过了 SCHEME NAME 但它不存在 我找不到要使用的环境变量 因此我必须开发一种解决方法 将方案名称写入磁盘建立预行动然后将其读回运行脚本 phase 对于您感兴趣的每个方案 请访问编辑方案并
  • LibGDX:如何使平铺地图图块可点击?

    如何为平铺地图中的图块添加点击侦听器 以便当您用鼠标选择图块时它会突出显示 libGDX 不直接支持这一点 因为 TiledMap 内容仅用于渲染 您可以轻松创建一个Stage不过 它将充当 TiledMap 的某种覆盖输入层 只需创建一个
  • 线程中的 GLib GMainContext?

    我在堆栈溢出上搜索以找到与我的问题相关的答案 但我没有找到任何答案 我有一个启动线程的主线程 我的 main 函数 新线程运行 GMainLoop 在我的主要功能中 我不断通过调用添加源g io watch一些文件描述符 但如果事件被调度
  • Python 日志记录和子进程输出以及错误流

    我想启动一个 python 进程并将子进程错误消息记录到父脚本的日志记录对象中 理想情况下 我希望将日志流统一到一个文件中 我可以以某种方式访问 日志记录类的输出流吗 我知道的一种解决方案是使用 proc log 进行日志记录 正如下面的答
  • 如何每天在特定时间触发 akka 调度程序?

    我创建了一个 Akka 的调度程序 每天在固定时间发送邮件 例如每天上午 6 00 那么如何称呼演员呢 我的意思是我应该使用什么逻辑 谢谢 只需计算现在和接下来的下午 6 点之间的差异 将其作为初始延迟 然后每 24 小时重复一次
  • Rails 5 - 在编辑操作中使用范围来查找特定实例的相关子项

    我正在尝试学习如何在 Rails 5 应用程序中使用范围 我问了一个背景问题here https stackoverflow com questions 41755032 rails 5 exclude specific instances
  • 在 React 中专注于 div,无需单击即可在模块上启用键盘导航

    我正在 React 中从头开始编写一个图像库 当单击图像时 会弹出一个模式 与我的库组件分开的组件 我想要使用左右箭头在图片之间导航 不仅仅是屏幕上添加的箭头 onclick 但目前它只关注当我单击一次时的模式 然后我也可以使用键盘导航 o
  • AWS - cfn-init 不创建文件

    我是云信息新手 我正在使用 cfn init 创建文件 但不会创建文件 我的堆栈也不会失败 使用 EC2 实例等所需资源成功创建堆栈 它还会安装 AWS CLI 如用户数据中所述 但它只是不创建我希望创建的文件 我尝试使用不允许回滚堆栈的高
  • 测试 RESTful 服务的方法? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想直接通过 HTTP 测试我的 RESTful 应用程序 并且我正在寻找可以帮助我完成该任务的工具 基本上我正在寻找一个简单的 HTTP 请求包装器
  • 我是否需要告诉 Apache Tomcat 保持 Websocket 连接打开?

    我正在尝试Apache Tomcat Websocket 实现 http tomcat apache org tomcat 7 0 doc web socket howto html 问题是 连接总是在最多 30 秒的空闲时间后关闭 我是否
  • 通过 DataMapper 来自 SQLite 内存数据库的 No Such Table 错误

    我有一个 Ruby 程序 它使用 DataMapper 作为 ORM 与内存中的 SQLite DB 进行通信 这一直工作得很好 但是我最近刚刚添加了一个新的 DM 类和相应的表 令我惊讶的是 现在在 auto migrate 过程中事情发