首页 > 解决方案 > 如何在 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 的日志模式?例如配置选项

标签: sqliteruby-on-rails-5

解决方案


自从我不得不这样做已经有一段时间了,但是您应该能够使用初始化程序,因此您不需要修补源代码。

把这样的东西放进去config/initializers/configure_sqlite_journal.rb

if c = ::ActiveRecord::Base.connection
    c.execute 'PRAGMA journal_mode = WAL'
end

应该做你想做的


推荐阅读