sqlite - 如何在 ruby-on-rails 中设置 Sqlite3 的日志模式
问题描述
我尝试在我的 Ruby-on-Rails 项目中设置 Sqlite3 的日志模式。
似乎 ruby-on-rails 使用 sqlite 的默认日志模式,即“删除”,因为我在更新数据库时在文件夹“db”中看到了一个日志文件,并且在更新完成后它被删除了。我希望将 jouranl-mode 设置为“WAL”或“memory”。我试过 Sqlite 命令行
PRAGMA main.journal_mode=WAL
但它不影响在 ruby-on-rails 中的应用。
最后我通过更改 sqlite3_adapter.rb 的源代码做到了
我更改了文件中的一个函数:activerecord-5.1.4/lib/active_record/connection_adapters/sqlite3_adapter.rb
def configure_connection
# here are original codes
execute("PRAGMA journal_mode = WAL", "SCHEMA")
end
因为 configure_connection 是由 SQLite3Adapter 的初始化调用的
尽管可行,但这听起来不是很好的解决方案。有没有更好的方法在 Ruby-on-Rails(版本为 5.1.4)中设置 Sqlite3 的日志模式?例如配置选项
解决方案
自从我不得不这样做已经有一段时间了,但是您应该能够使用初始化程序,因此您不需要修补源代码。
把这样的东西放进去config/initializers/configure_sqlite_journal.rb
if c = ::ActiveRecord::Base.connection
c.execute 'PRAGMA journal_mode = WAL'
end
应该做你想做的
推荐阅读
- c++ - 指针和动态分配数组;EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)
- python - 从python访问iwd dbus接口
- numpy - 在 Qt 中显示 matplotlib imshow 输出
- python - Bootstrap Django:仅在选项卡中显示活动字段
- c - 从算术运算中获取溢出
- apache-spark - 在 IP 而不是 Hostname 上启动 Spark master
- javascript - SQL 数据库不会更新值
- java - Spring redirectAttributes 在“dev”之外的其他配置文件中不起作用
- postgresql - 在 WHERE 子句中使用集合返回函数
- ios - How can I add custom textField to my alert?