jruby 1.5.1, предупреждение: уже инициализированная константа - PullRequest
1 голос
/ 30 января 2012

Использование jruby 1.5.1

В довольно простом cronjob, который использует драгоценные камни:

  • DBI
  • DBD-1008 * JDBC *
  • JDBC-MySQL

Он также использует чистый драйвер JDBC Java в jar, 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', надеясь, что есть некоторые сопровождающие, которые заботятся, я не знаю.

больше обновлений : Хорошо, и уже есть проблема, поданная для этого, с августа. https://github.com/erikh/ruby-dbi/pull/8 Похоже, камень не очень ухоженный. вздох. иногда рубиновое сообщество действительно расстраивает меня.

1 Ответ

0 голосов
/ 02 февраля 2012

Проверьте это, я думаю, это то, что вам нужно:

Подавление предупреждений от Ruby

В комментарии там упоминается метод Rails для отключения предупреждений , но я не думаю, что вы используете Rails.

РЕДАКТИРОВАТЬ: Я нашел немного чище код здесь: http://mislav.uniqpath.com/2011/06/ruby-verbose-mode/

РЕДАКТИРОВАТЬ: Примечание: комментатор ниже, кажется, не согласен с упомянутой выше записью в блоге. Я не выражаю согласие или несогласие с записью в блоге и не высказываю мнение о достоинствах или недостатках многословного режима Руби; просто благодарю автора за немного более чистый код, который я нашел там.

Я думаю, это то, что вы бы сделали:

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' }
...