2016-05-29 29 views
2

У меня есть модуль Perl под названием CGI::Github::Webhook, чей тест люкс works fine on Travis CI so far on the branch master. Но поскольку это модуль для написания сценариев CGI, я хотел протестировать его с помощью CGI::Test, поскольку это было бы ближе к реальным сценариям.«.../auto/List/Util/Util.so: undefined symbol: PL_stack_sp at .../XSLoader.pm" только при запуске набора тестов с CGI :: Test _and_ на Travis CI

Но every Travis CI run in the branch cgi-test failed so far. для прогонов с Perl 5.24 и выше, за исключением, каждый не удалось запустить содержали эти строки, только с разными номерами версий Perl в пути:

Attempt to reload List/Util.pm aborted. 
Compilation failed in require at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/Sub/Exporter/Progressive.pm line 9. 
BEGIN failed--compilation aborted at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/Sub/Exporter/Progressive.pm line 9. 
Compilation failed in require at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/Devel/GlobalDestruction.pm line 11. 
BEGIN failed--compilation aborted at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/Devel/GlobalDestruction.pm line 11. 
Compilation failed in require at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/Moo/_Utils.pm line 21. 
BEGIN failed--compilation aborted at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/Moo/_Utils.pm line 21. 
Compilation failed in require at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/Moo.pm line 4. 
BEGIN failed--compilation aborted at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/Moo.pm line 4. 
Compilation failed in require at /home/travis/build/xtaran/CGI-Github-Webhook/build_dir/lib/CGI/Github/Webhook.pm line 11. 
BEGIN failed--compilation aborted at /home/travis/build/xtaran/CGI-Github-Webhook/build_dir/lib/CGI/Github/Webhook.pm line 11. 
Compilation failed in require at ./cgitest.pl line 10. 
BEGIN failed--compilation aborted at ./cgitest.pl line 10. 
script /cgi-bin/cgitest.pl generated no valid headers at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/CGI/Test.pm line 468. 
Use of uninitialized value $in_fname in unlink at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/CGI/Test.pm line 469. 
Use of uninitialized value $in_fname in concatenation (.) or string at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/CGI/Test.pm line 469. 
can't unlink : No such file or directory at /home/travis/perl5/perlbrew/perls/5.22.0/lib/site_perl/5.22.0/CGI/Test.pm line 469. 

Пример взят из currently latest run under Perl 5.22. Симптомы на Perl 5.24 более или менее одинаковы, только исходное сообщение об ошибке выглядит по-разному.

Кто-нибудь знает, что здесь не так? У меня даже есть шанс исправить это? Похож на меня. Но в каком модуле? Я не нашел соответствующих отчетов об ошибках against CGI-Test, Scalar-List-Utils или XSLoader, но ожидал, что такая проблема уже сообщается, поскольку она не кажется новой. (Первое замечено несколько месяцев назад.)

Хотя это не сработает, если я запустил этот набор тестов с системными модулями Perl и Perl на Debian Unstable (в настоящее время Perl версии 5.22), поэтому я не могу воспроизвести проблемы на местном уровне.

+1

Я попытался клонировать ветку 'cgi-test' на моем ноутбуке Ubuntu, а затем запустить' dzil run prov' для проверки неудачных тестов. Первый запуск завершился неудачно из-за недостающих модулей: File :: Slurper, Test :: File и CGI :: Test. После установки этих трех модулей все тесты прошли. –

+1

Спасибо за комментарий. Обычно я использую 'dzil smoke' или' dzil test' вместо 'dzil run prov'. Не уверен, что это имеет значение здесь. Dist :: Zilla должен собрать все необходимые модули и записать их в 'META.yml' и' META.json'. И поскольку сообщение об ошибке явно не является проблемой «недостающего модуля», я сомневаюсь, что проблемы, с которыми вы столкнулись, связаны между собой. –

ответ

4

Обнаружил это сам: это строки #!/usr/bin/perl shebang в моем примере CGI-скрипты в наборе тестов (и/или, возможно, также одна и та же строка shebang в t/cgi-test.t).

Changing them to #!/usr/bin/env perl fixed the issue, то есть проверенные CGI-скрипты выполнялись с системой perl вместо установленного perlbrew.

+0

Должен действительно быть путь к правильному 'perl'. – ikegami