正在使用SQLite3运行rails站点.

大约每500个请求我就会收到一次

ActiveRecord::StatementInvalid(SQLite3::BusyException:数据库已锁定:...

有什么方法可以对我的代码进行最小程度的修改?

我现在使用SQLLite是因为你可以将数据库存储在源代码管理中,这样备份就很自然了,你可以很快将更改推出.然而,它显然不是真正为并发访问设置的.明天早上我将迁移到MySQL.

推荐答案

默认情况下,如果数据库忙且已锁定,sqlite会立即返回一个阻塞的忙错误.你可以要求它等待,并在放弃之前继续try 一段时间.这通常可以解决问题,除非有1000个线程访问数据库,我同意sqlite不合适.

    // set SQLite to wait and retry for up to 100ms if database locked
    sqlite3_busy_timeout( db, 100 );

Ruby-on-rails相关问答推荐

Rails HotWire和View Components:涡轮框架不会取代内容

Rails ActiveRecord::LogSubscriber 不输出详细查询日志(log)

`ActionController::API` 祖先类在加载后不会更新

在 Datatable Ajax 调用中通过 Ajax 更新 div

您如何查看在 Rails 中触发回调的关联模型?

来自控制台的 ActionCable.server.broadcast

如何在 Windows 中更新 ruby

在 Rails 中找不到关联问题

上传图片 Ruby on Rails

价格字段的字符串、小数或浮点数据类型?

没有要加载的文件 - readline

Rails - 使用 %W

在 Rails 应用程序中处理大文件上传的最佳方法是什么?

设计记住我和会话

Rails 控制台中手动更新属性值的验证问题

你如何覆盖 form_for 助手中的类名?

如何在 Rails 4 中测试控制器关注点

没有路由匹配缺少必需的键:[:id]

警告:运行 ruby​​ 或 gem 命令时不安全的世界可写目录

在 Ruby on Rails 中设置日志(log)记录级别