2015-07-09 1 views
3

Я попытался обезжирить свой скрипт Perl с помощью утилиты fatpack из модуля App :: Fatpacker (на CentOS 6.6 с 64-битным запуском Perl 5.20). Мой скрипт использует Log :: Log4perl модуль для ведения журнала. fatpack утилита жалуется на модуле регистрации:Можно ли использовать скрипт с помощью Log :: Log4perl с помощью App :: Fatpacker?

fatpack trace collect_genomes_to_database.pl 
collect_genomes_to_database.pl syntax OK 
fatpack packlists-for `cat fatpacker.trace` >packlists 
Can't locate object method "new" via package "Log::Log4perl::Appender" at ~/perl5/lib/perl5/Log/Log4perl/Logger.pm line 33. 
Compilation failed in require at ~/perl5/lib/perl5/Log/Log4perl/Config.pm line 8. 
BEGIN failed--compilation aborted at ~/perl5/lib/perl5/Log/Log4perl/Config.pm line 8. 
Compilation failed in require at ~/perl5/lib/perl5/Log/Log4perl/Appender.pm line 9. 
BEGIN failed--compilation aborted at ~/perl5/lib/perl5/Log/Log4perl/Appender.pm line 9. 
Compilation failed in require at ~/perl5/lib/perl5/App/FatPacker.pm line 149. 
BEGIN failed--compilation aborted at ~/perl5/bin/fatpack line 3. 

ли кто-то успеха упаковки скрипта, содержащий Log :: Log4perl или не выполнима?

Можете ли вы предложить другой метод создания самосогласованного скрипта?

+1

Звучит как 'Log :: Log4perl :: Appender 'загружается во время выполнения через' require' или аналогичный; заставляя толстяка не видеть его, а не обезжирить его. Попробуйте добавить явный 'use Log :: Log4perl :: Appender'' и снова перетяните все это, посмотрите, поможет ли это. – Mithaldu

+2

Поздравляем, вы обнаружили ошибку: https://github.com/mschilli/log4perl/issues/59 – Mithaldu

ответ

4

The docs of App::FatPacker говорят, что поддержка лучше всего обеспечивается за счет #toolchain на irc.perl.org. Я взял на себя смелость поделиться этим вопросом.

Ниже приведен журнал разговоров с ненужным удаленным материалом.

[16:02:15] < simbabque> MST: интересный вопрос о fatpacker Is it possible to fatpack script using Log::Log4perl using App::Fatpacker?
[16:15:47] < MST> simbabque: не очень, пользователь не использует свой мозг и Mithaldu уже решена проблема :)
[16:15:47] < Mithaldu> \ o/
[16:16:08] < Mithaldu> Основная проблема: пользователь использует старый perl, который не говорит им загружать модуль
[16:16:50] < mst> hm, на самом деле, это, как представляется, пакеты для команды
[16:16:51] < MST> simbabque: ждать
[16:16:53] < MST> трахать меня работает
[16:17:14] < MST> это может быть ошибка l4p
[ 16:17:31] < MST> simbabque: Оооо
[16:18:02] < MST> Я думаю
[16:18:24] < MST> Вход :: Log4perl :: Appender загружается :: Config который загружается :: Logger ...который затем пытается -> new on :: Appender до того, как будет определен метод еще
[16:18:49] < mst> следовательно, почему пакеты запускаются, пытаясь потребовать модули
[16:19:29] ] < Mithaldu> это звучит различные виды оон удовольствия
[16:21:00] < MST> или он пропустил кусок ошибки
[16:21:23] < simbabque>, что он что-то не хватает звуков, скорее всего
[16:21:28] < mst> ах, нет, он требует, я прав, а L4p трахается
[16:21:32] < mst> 149 is 'require $ t;'
[16:21:42] < mst> это круговая проблема, требующая проблемы в l4p
[16:22:57] < Mithaldu>, так что он собирается иметь% INC munge?
[16:24:25] < MST> или кто-то должен ударить MSCHILLI с палкой и получить его фиксированной
[16:27:13] < MST> BINGO
[16:27:17] < MST> Perl -e 'использовать Log :: Log4perl :: Appender;'
[16:27:19] < MST> БУМ
[16:30:15] < MST>https://github.com/mschilli/log4perl/issues/59
[16:30:16] < Dipsy> [Круговой требует, вызывает взрыв · Выпуск № 59 · mschilli/log4perl · GitHub]
[16:30:22] < MST> может кто-нибудь засунуть, что на SO пожалуйста
[16:30:35] < Mithaldu> уверены
[16:33:44] < kentnl> Я представлял вы можете обойти это, избегая проблемного модуля в packlists-for и копируя его вручную, после этапа «Дерево». Но я не много сделал здесь.
[16:34:11] < MST> PERL5OPT = '- Mlog :: Log4perl' fatpack ...
[16:34:13] - * - эфир видит выскочка уже ушел:/
[16: 34:14] < MST> вероятно, будет работать
[16:34:26] < MST> Угу

Как Кент Фредрик уже писал, обходной путь заключается в

$ PERL5OPT='-mLog::Log4perl' fatpack collect_genomes_to_database.pl 

... но он был быстрее в публикации.


И это сообщество Perl на работе. :)

+0

Благодарим за помощь. – mocnii

+0

У меня были проблемы с другим модулем. Аналогичная ошибка. Используется: PERL5OPT = '- mLog :: Log4perl' PERL5OPT = '- mLog :: Report :: Message' PERL5OPT = '- mLog :: Report' fatpack pack ... – mocnii

+0

Вы знаете, в чем проблема сейчас. Вы можете посмотреть в коде. Или поговорите с mst в IRC. – simbabque

4

У вас есть found a bug in Log4perl.

Один из способов проблемы заключается в явной загрузке Log4perl перед остальными.

PERL5OPT='-mLog::Log4perl' fatpack ... 

Это должно решить проблему достаточно, чтобы все могло сработать.

Hat Подсказка для mst и irc.perl.org#toolchain