【问题标题】:How to suppress DDL log如何抑制 DDL 日志
【发布时间】:2012-04-28 01:06:23
【问题描述】:

可以说,我正在编写一个以“非标准”方式使用 MySQL 的应用程序。它严重依赖于动态创建/删除的表。

到目前为止,它运行正常。不过,这些规格并不让我高兴。每当我运行它们时,我都会收到大量 activerecord 的 ddl 日志消息。自己看:

SqlDailyEvents
-- create_table("11_daily_events_20120428")
   -> 0.0032s
  should create and drop a table
-- create_table("11_daily_events_20120428")
   -> 0.0030s
  should not create the same table twice
  should not drop the same table twice

那是--format d--format p 看起来更糟!

如何关闭它?此日志似乎不受ActiveRecord::Base.logger 的影响(我尝试将其设置为nil)。

【问题讨论】:

    标签: mysql ruby-on-rails ruby activerecord rspec


    【解决方案1】:

    (删除了使用内核方法操作$stdout的代码)

    毕竟是 ActiveRecord。似乎如果您以“新”方式定义迁移(使用 change 方法而不是 up/down 对),它不会向您发送太多垃圾邮件。无论如何,它有一个类似的方法,但它操纵了 Migration 的冗长,而不是$stdout

    现在我的代码如下所示:

      def up
        # built-in method. sets verbose flag to false
        suppress_messages do
          create_table table_name do |t|
            t.column :username, :string
          end
        end
      end
    

    【讨论】:

    • 必须有更好的方法。你知道是谁在制造这些信息吗?是 ActiveRecord 还是 MySQL 驱动程序?
    • 到目前为止我还没有发现。因此,这个快速而肮脏的解决方案。
    • @muistooshort:知道了,现在看起来更好了吗? :)
    • 更好。但是你真的需要为此使用迁移吗?我的印象是connection.execute('create table ...') 更适合您的情况。
    • 不,我真的不需要迁移。但是这种方式形成表名的逻辑与创建/删除表的代码保持接近。这似乎是一件好事。此外,如果我决定迁移到 postgres,迁移应该可以减轻痛苦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多