【问题标题】:Rails console is not outputting SQL Statements to my Development LogRails 控制台未将 SQL 语句输出到我的开发日志
【发布时间】:2011-09-23 20:52:34
【问题描述】:

当我通过 localhost 访问我的 Webrick 服务器时,或者当我运行 rails 迁移时,我的 development.log 被正确写入。但是,当我用“rails c”启动我的rails控制台,然后尝试创建一个新的数据库对象并通过“user.save”之类的命令保存它时,我在控制台中看到了SQL语句,但没有写入任何内容开发日志。

大多数人在回答与此类似的问题时会说“检查以确保配置设置为正确的环境”。我已经这样做了,并且可以在我的系统上说这发生在一个全新的 Rails 应用程序中。

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: ruby ruby-on-rails-3 logging development-environment


    【解决方案1】:

    rails 控制台从不写入日志文件,但您可以很容易地实现它,例如,如果您在启动 rails 控制台后执行以下操作

    ActiveRecord::Base.logger = Logger.new STDOUT
    

    rails 会将所有 SQL 语句记录到标准输出,从而在终端中显示它们。 并且由于Logger.new 接受任何流作为第一个参数,您可以让它写入rails development.log:

    ActiveRecord::Base.logger = Logger.new File.open('log/development.log', 'a')
    

    【讨论】:

    • 感谢您的回复。您说 Rails 控制台从不写入日志文件。对我来说,这似乎增加了 Michael Hartl 在“The Ruby on Rails Tutorial 3”第 6.1.3 节中所教的内容的可能性。它说:..在控制台上工作,密切关注开发日志很有用,这记录 Active Record 发出的实际低级 SQL 语句,如图 6.4 所示。在 Unix 命令行中获取此输出的方法是跟踪日志: $ tail -f log/development.log - 我是否认为在这种情况下它的 Active Record 正在写入日志?如果是这样..我的失败
    • 我很确定,rails 通常不会在控制台模式下登录到文件。如果我错了会很尴尬:),但也许我错了?或者您可能错过了 Hartl 书中的一些设置部分?我没看过那本书,所以我不知道。
    • 确切地说,Rails 的不同部分,即 ActionController、ActiveRecord 等都写入日志。你可以为这些框架设置不同的记录器,或者只设置 Rails.logger = Logger.new(STDOUT),但是在 Rails 控制台中,你没有从控制器等记录,因为你通常只使用模型
    • 已在 3.1.1 版中确认:Rails 控制台记录到 development.log。
    • 3.2.x 确实在开发日志中添加“连接到database.yml指定的数据库”,但是SQL语句被发送到STDOUT。
    【解决方案2】:

    我在 Rails 2.3.8 中,上面的答案对我不起作用。

    ActiveRecord::Base.logger = Logger.new STDOUT
    

    以下实际工作:

    ActiveRecord::Base.connection.instance_variable_set :@logger, Logger.new(STDOUT)
    

    参考http://www.shanison.com/2012/03/05/show-sql-statements-in-rails-console/

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2017-09-24
      • 2018-02-05
      相关资源
      最近更新 更多