Ruby on rails 4 如何在Rails 4 WEBrick中为非开发环境获取SQL日志记录?

Ruby on rails 4 如何在Rails 4 WEBrick中为非开发环境获取SQL日志记录?,ruby-on-rails-4,Ruby On Rails 4,我使用的是Rails 4.1.2。我有一些与我的开发环境完全相同的环境。换句话说,我通过简单地将config/environments/development.rb复制到具有不同名称的文件(例如,destaging.rb)来创建它们。它们仅在database.yml中的连接信息上有所不同 如果我在命令行发出RAILS\u ENV=destaging RAILS s或RAILS s s-e destaging,一切都会按照我的要求运行,除了我没有得到到STDOUT的SQL日志记录,这是一个麻烦 由

我使用的是Rails 4.1.2。我有一些与我的开发环境完全相同的环境。换句话说,我通过简单地将
config/environments/development.rb
复制到具有不同名称的文件(例如,
destaging.rb
)来创建它们。它们仅在
database.yml
中的连接信息上有所不同

如果我在命令行发出
RAILS\u ENV=destaging RAILS s
RAILS s s-e destaging
,一切都会按照我的要求运行,除了我没有得到到
STDOUT
的SQL日志记录,这是一个麻烦


由于我的
卸载
环境与我的
开发
环境完全相同,只是
数据库.yml中的连接设置不同,我怀疑有什么东西正在寻找一个名为
development
的环境,并且仅当具有该名称的环境处于活动状态时才启用SQL日志记录到
STDOUT
。如何为通过WEBRick启动的其他环境启用SQL日志记录到STDOUT

对于后代,我发现了如何做到这一点。首先,我使用Rails 4.1.2运行Ruby 2.1.2。如果这不是您的环境,您的里程数可能会有所不同,尽管我怀疑解决方案会非常相似

因此,首先必须修改
bin/rails
。打开此文件并按如下所示进行更改。(为了清晰起见,我已经发布了整个文件,不包括shebang。)

由于
需要“rails/commands”
会立即执行服务器,因此在该行之后进行猴子补丁是不起作用的。它被完全忽略了。如果在需要命令之前尝试对其进行monkey修补,它会爆炸,因为尚未定义
Rails::Server::Options
类。因此,我们必须先发制人地要求
rails/commands/server
,以便我们可以将其别名为
parse方法


伊姆霍,猴子修补术应该是最后的手段。然而,我认为在这种情况下没有其他选择。如果有人有更好的想法,我很乐意听听。

我在使用非标准环境名称(在您的例子中是“destaging”)的相同版本的Rails和Ruby中也遇到了这个问题。但是,我不想让它影响所有环境,也不想再浪费时间不完成工作,所以我只是改变了启动服务器的方式:

(tail-F log/destaging.log&)和rails s

然后,要重新启动服务器,请照常按住ctrl-c键,然后再次按住
rails s
。尾巴将继续在后台运行,无论出于何种意图和目的,这种体验都将像它停止工作之前一样

begin
  load File::expand_path("../spring", __FILE__)
rescue LoadError
end

APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'

# Here comes the important part
require 'rails/commands/server'
class Rails::Server::Options
  def parse_with_logging!(args)
    options = parse_without_logging!(args)
    options[:log_stdout] = true # Or whatever condition you want
    options
  end
  alias_method_chain :parse!, :logging
end

require 'rails/commands'