jruby 1.5.1,警告:已经初始化常量Deprecate

时间:2012-01-30 16:58:33

标签: ruby jruby

使用jruby 1.5.1

在一个使用宝石的非常简单的cronjob中:

  • DBI
  • DBD-JDBC
  • JDBC的MySQL的

它还在jar中使用纯Java JDBC驱动程序,jtds-1.2.5.jar

每次我运行它时,我都会在STDERR中找到它(这会让我的cronjob监视实用程序烦恼,它认为stderr上的任何内容都可能有问题)

/usr/local/rvm/gems/jruby-1.6.5.1/gems/deprecated-2.0.1/lib/deprecated.rb:199 warning: already initialized constant Deprecate

??有任何想法吗?发生了什么事,我该怎么办呢?不确定哪些宝石依赖于“已弃用”的库或什么版本,任何简单的方法都可以找到?

啊,好吧,想通了:

[rochkind@catalyst pull_reserves]$ gem dependency dbi
Gem dbi-0.4.5
  deprecated (= 2.0.1)

但0.4.5是'dbi'的最新版本,它被锁定为2.0.1的'弃用'。有一个更新的3.0.0版本已弃用。

好的......不确定我现在的问题是什么,除非有人能够详细了解发生了什么,以及我的实际选择是什么。我想报告是'dbi'宝石的一个问题,希望它有一些关心的维护者,我不知道。

更新:好的,从8月开始就已经存在问题。 https://github.com/erikh/ruby-dbi/pull/8看起来宝石不是很保养。叹。有时红宝石社区真的让我感到沮丧。

1 个答案:

答案 0 :(得分:-1)

检查一下,我认为这就是你所需要的:

Suppress Warnings From Ruby

有评论提及Rails method to silence warnings,但我不认为您使用的是Rails。

编辑:我在这里找到了稍微清晰的代码: http://mislav.uniqpath.com/2011/06/ruby-verbose-mode/

编辑:注意:下面的评论者似乎不同意上面提到的博客条目。我没有表达对博客条目的同意或不同意,我并不反对Ruby的冗长模式的好坏。只是将作者用于我在那里找到的稍微清洁的代码。

我认为这就是你要做的事情:

module Kernel
def silence_warnings
    with_warnings(nil) { yield }
end

def with_warnings(flag)
    old_verbose, $VERBOSE = $VERBOSE, flag
    yield
ensure
    $VERBOSE = old_verbose
end
end unless Kernel.respond_to? :silence_warnings


# assuming the warning is being generated when the dbi module is loaded...
silence_warnings { require 'dbi' }