我正在使用Rails 4.1.2。我有一些环境是我的开发环境的精确副本。换句话说,我通过简单地将config/environments/development.rb复制到一个具有不同名称的文件(例如,destaging.rb)来创建它们。它们仅在database.yml中的连接信息上有所不同。
如果我在命令行发出RAILS_ENV=destaging rails s或rails s -e destaging,一切都可以按我的意愿工作,除了没有将SQL发送到STDOUT之外,这是一个令人沮丧的问题。
由于我的destaging环境与我的development环境完全相同,除了database.yml中的不同连接设置之外,我怀疑有什么东西在寻找一个名为development的环境,并且只有在具有该名称的环境处于活动状态时才启用该环境到STDOUT。如何为通过STDOUT启动的其他环境启用WEBRick日志记录?
发布于 2014-09-12 14:51:44
为了子孙后代,我发现了如何做到这一点。首先,我使用Rails 4.1.2运行Ruby2.1.2。如果这不是您的环境,您的里程可能会有所不同,虽然我怀疑解决方案将非常相似。
因此,首先您必须修改bin/rails。打开此文件并按以下方式更改它。(为了清晰起见,我发布了整份文件,减去了整份文件。)
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'由于require 'rails/commands'立即执行服务器,所以行后的猴子补丁无法工作。它只是被忽略了。如果在需要命令之前尝试对其进行猴子修补,它会爆炸,因为还没有定义Rails::Server::Options类。因此,我们必须先发制人地要求rails/commands/server,这样我们就可以将它的parse!方法化名.
给猴子打补丁几乎总是最后的办法,IMHO。然而,我认为在这种情况下别无选择。如果有人有更好的主意,我很想听听。
发布于 2015-01-25 12:13:48
在Rails和Ruby的相同版本中,我也遇到了这个问题,使用了一个非标准的环境名称(在您的例子中是“卸载”)。但是,我不希望它影响所有的环境,也不想浪费更多的时间来完成工作,所以我只是改变了启动服务器的方式:
(tail -F log/destaging.log &) && rails s
然后重新启动服务器,如往常一样使用ctrl,然后再重新启动rails s。尾巴将继续在背景和所有意图和目的,将是它的经验之前,停止工作。
https://stackoverflow.com/questions/25541222
复制相似问题