Ubuntu22.04+Perl5.38.0下Webservice::InterMine安装失败求助
解决Webservice::InterMine在Perl 5.38.0/Ubuntu 22.04下的安装测试失败问题
问题背景
在Ubuntu 22.04、Perl 5.38.0环境下安装Webservice::InterMine模块时,集成测试t/07_intermine/01_integration.t失败,核心报错为:
Can't call method "host" on an undefined value at /home/con/.cpan/build/Webservice-InterMine-1.0405-1/blib/lib/Webservice/InterMine/Service.pm line 833.
完整报错日志如下:
Loading internal logger. Log::Log4perl recommended for better logging Reading '/home/con/.cpan/Metadata' Database was generated on Fri, 04 Aug 2023 17:29:02 GMT Running install for module 'Webservice::InterMine' CPAN: Digest::SHA loaded ok (v6.04) CPAN: Compress::Zlib loaded ok (v2.204) Checksum for /home/con/.cpan/sources/authors/id/I/IN/INTERMINE/Webservice-InterMine-1.0405.tar.gz ok CPAN: YAML loaded ok (v1.30) CPAN: CPAN::Meta::Requirements loaded ok (v2.140) CPAN: Parse::CPAN::Meta loaded ok (v2.150010) CPAN: CPAN::Meta loaded ok (v2.150010) CPAN: Module::CoreList loaded ok (v5.20230520) CPAN: Module::Build loaded ok (v0.4234) Configuring I/IN/INTERMINE/Webservice-InterMine-1.0405.tar.gz with Build.PL Created MYMETA.yml and MYMETA.json Creating new 'Build' script for 'Webservice-InterMine' version '1.0405' INTERMINE/Webservice-InterMine-1.0405.tar.gz /home/con/perl5/perlbrew/perls/perl-5.38.0/bin/perl Build.PL -- OK Running Build for I/IN/INTERMINE/Webservice-InterMine-1.0405.tar.gz Building Webservice-InterMine INTERMINE/Webservice-InterMine-1.0405.tar.gz ./Build -- OK CPAN: CPAN::DistnameInfo loaded ok (v0.12) Running Build test for INTERMINE/Webservice-InterMine-1.0405.tar.gz t/00-load.t ................................ 1/1 # Testing Webservice::Webservice::InterMine 1.0405, Perl 5.038000, /home/con/perl5/perlbrew/perls/perl-5.38.0/bin/perl t/00-load.t ................................ ok t/01_path/01_validate.t .................... ok t/02_pathfeature/01_pathfeature.t .......... ok t/03_constraint/01_constraint.t ............ ok t/03_constraint/02_constraint_factory.t .... ok t/03_constraint/03_template_constraints.t .. ok t/03_constraint/04_logic.t ................. ok t/04_query/01_core.t ....................... ok t/04_query/02_pathquery.t .................. ok t/04_query/03_saved.t ...................... ok t/04_query/03_scripted.t ................... ok t/04_query/04_template.t ................... ok t/04_query/05_good_and_bad_templates.t ..... ok t/05_template/01_factory.t ................. ok t/06_service/01_service.t .................. ok t/06_service/02_result_iterator.t .......... ok t/06_service/03_result_objects.t ........... ok t/06_service/04_serviced_queries.t ......... ok t/06_service/05_result_row.t ............... ok t/06_service/06_test_export_exclusion.t .... ok t/06_service/07_test_inclusion.t ........... ok t/07_intermine/01_integration.t ............ 1/44 # Failed test 'use Webservice::InterMine;' # at t/07_intermine/01_integration.t line 87. # Tried to use 'Webservice::InterMine'. # Error: Can't call method "host" on an undefined value at /home/con/.cpan/build/Webservice-InterMine-1.0405-1/blib/lib/Webservice/InterMine/Service.pm line 833. # at /home/con/.cpan/build/Webservice-InterMine-1.0405-1/blib/lib/Webservice/InterMine/Service.pm line 833. # Webservice::InterMine::Service::fetch(Webservice::InterMine::Service=HASH(0x564ecb9444a0), "http://fake.url/path/service/version") called at /home/con/.cpan/build/Webservice-InterMine-1.0405-1/blib/lib/Webservice/InterMine/Service.pm line 219 # Webservice::InterMine::Service::__ANON__(Webservice::InterMine::Service=HASH(0x564ecb9444a0)) called at constructor Webservice::InterMine::Service::new (defined at /home/con/.cpan/build/Webservice-InterMine-1.0405-1/blib/lib/Webservice/InterMine/Service.pm line 913) line 141 # Webservice::InterMine::Service::new("Webservice::InterMine::Service", "fake.url/path") called at /home/con/.cpan/build/Webservice-InterMine-1.0405-1/blib/lib/Webservice/InterMine.pm line 463 # Webservice::InterMine::get_service("Webservice::InterMine", "fake.url/path") called at /home/con/.cpan/build/Webservice-InterMine-1.0405-1/blib/lib/Webservice/InterMine.pm line 207 # Webservice::InterMine::import("Webservice::InterMine", "fake.url/path") called at t/07_intermine/01_integration.t line 87 # main::BEGIN() called at t/07_intermine/01_integration.t line 87 # eval {...} called at t/07_intermine/01_integration.t line 87 # eval 'package main; # BEGIN { ${^WARNING_BITS} = $args[-1] if defined $args[-1] } # #line 87 t/07_intermine/01_integration.t # use Webservice::InterMine @{$args[0]}; # 1; # ' called at /home/con/perl5/perlbrew/perls/perl-5.38.0/lib/5.38.0/Test/More.pm line 1056 # Test::More::_eval("package main;\x{a}BEGIN { \${^WARNING_BITS} = \$args[-1] if defined"..., ARRAY(0x564ec7c55fa0), "UUUUUUUUUUUUUUUUUUUU") called at /home/con/perl5/perlbrew/perls/perl-5.38.0/lib/5.38.0/Test/More.pm line 1031 # Test::More::use_ok("Webservice::InterMine", "fake.url/path") called at t/07_intermine/01_integration.t line 87 # BEGIN failed--compilation aborted at t/07_intermine/01_integration.t line 87. # at t/07_intermine/01_integration.t line 87. # eval 'package main; # BEGIN { ${^WARNING_BITS} = $args[-1] if defined $args[-1] } # #line 87 t/07_intermine/01_integration.t # use Webservice::InterMine @{$args[0]}; # 1; # ' called at /home/con/perl5/perlbrew/perls/perl-5.38.0/lib/5.38.0/Test/More.pm line 1056 # Test::More::_eval("package main;\x{a}BEGIN { \${^WARNING_BITS} = \$args[-1] if defined"..., ARRAY(0x564ec7c55fa0), "UUUUUUUUUUUUUUUUUUUU") called at /home/con/perl5/perlbrew/perls/perl-5.38.0/lib/5.38.0/Test/More.pm line 1031 # Test::More::use_ok("Webservice::InterMine", "fake.url/path") called at t/07_intermine/01_integration.t line 87 No url provided - either directly or on 'use' at t/07_intermine/01_integration.t line 89. at /home/con/.cpan/build/Webservice-InterMine-1.0405-1/blib/lib/Webservice/InterMine.pm line 457. Webservice::InterMine::get_service("Webservice::InterMine") called at t/07_intermine/01_integration.t line 89 # Looks like your test exited with 255 just after 1. t/07_intermine/01_integration.t ............ Dubious, test returned 255 (wstat 65280, 0xff00) Failed 44/44 subtests t/10_acceptance/01_live_test.t ............. skipped: Acceptance tests for release testing only t/10_acceptance/02_lists.t ................. skipped: Acceptance tests for release testing only t/10_acceptance/02_lists_with_tokens.t ..... skipped: Acceptance tests for release testing only t/10_acceptance/04_paths.t ................. skipped: Acceptance tests for release testing only t/10_acceptance/05_summaries.t ............. skipped: Acceptance tests for release testing only t/10_acceptance/06_redirection.t ........... skipped: Acceptance tests for release testing only t/10_acceptance/07_lazy_references.t ....... skipped: Acceptance tests for release testing only t/10_acceptance/08_enrichment.t ............ skipped: Acceptance tests for release testing only t/10_acceptance/09_widgets.t ............... skipped: Acceptance tests for release testing only t/10_acceptance/10_id_resolution.t ......... skipped: Acceptance tests for release testing only t/manifest.t ............................... skipped: Author tests not required for installation t/moose-hygiene.t .......................... ok t/pod-coverage.t ........................... skipped: Complete documentation coverage is coming shortly t/pod.t .................................... ok Test Summary Report ------------------- t/07_intermine/01_integration.t (Wstat: 65280 (exited 255) Tests: 1 Failed: 1) Failed test: 1 Non-zero exit status: 255 Parse errors: Bad plan. You planned 44 tests but ran 1. Files=36, Tests=4540, 23 wallclock secs ( 0.26 usr 0.04 sys + 21.69 cusr 0.72 csys = 22.71 CPU) Result: FAIL Failed 1/36 test programs. 1/4540 subtests failed. INTERMINE/Webservice-InterMine-1.0405.tar.gz ./Build test -- NOT OK //hint// to see the cpan-testers results for installing this module, try: reports INTERMINE/Webservice-InterMine-1.0405.tar.gz
报错原因
测试用例使用了无效的fake.url/path作为服务地址,导致模块在尝试连接时无法解析主机信息,触发Can't call method "host" on an undefined value错误,进而终止整个集成测试。其他单元测试全部通过,说明模块核心功能正常。
解决方案
方案1:跳过测试直接安装(推荐)
因为测试失败是集成测试的环境问题,不影响模块实际使用,直接跳过测试强制安装:
- 使用
cpanm:
cpanm --notest Webservice::InterMine
- 使用CPAN shell:
cpan force install Webservice::InterMine quit
方案2:修复测试文件后完成安装
如果你希望通过所有测试,可以手动修改测试文件中的无效URL:
- 找到CPAN构建目录,比如
/home/con/.cpan/build/Webservice-InterMine-1.0405-1/ - 编辑
t/07_intermine/01_integration.t,将fake.url/path替换为真实的InterMine服务地址(例如https://www.flymine.org/flymine) - 重新运行测试并安装:
cd /home/con/.cpan/build/Webservice-InterMine-1.0405-1/ ./Build test ./Build install
内容的提问来源于stack exchange,提问作者con
相关产品推荐
相关产品推荐

