【问题标题】:Module::Build test looks in different directories on different systemsModule::Build 测试在不同系统上的不同目录中查找
【发布时间】:2017-06-12 20:39:24
【问题描述】:

我正在尝试将 Perl Mojolicious 项目从开发系统安装到暂存系统。在暂存系统(Centos)上,测试在错误的位置寻找配置文件。也就是说,例如,

./Build test --test-files t/001_basic.t

出错

t/001_basic.t .. 1/?配置文件“/home/randall/git/Project/blib/project.json”丢失,可能需要自己创建?

在开发系统(Ubuntu)上,相同的Build test 命令正在从父目录(即/home/randall/git/Project/project.json)读取配置文件,这正是我想要的。

我已经排除工作目录可能是罪魁祸首,并重新运行perl Build.PL,重新生成构建脚本。

我遗漏了什么会导致暂存系统在 blib 目录中查找?

编辑:补充说 dev 是 Ubuntu,staging 是 Centos,虽然我不认为这是一个因素

【问题讨论】:

  • 它是 Build.PL 在 git 目录中做一些特别的事情吗?这可能就是区别。
  • 我不知道;无论如何,在两个系统上它都在一个 git 目录中。我认为这与 Mojolicious 查找配置文件的方式有关(使用 Mojolicious::Plugin::JSONConfig

标签: perl testing mojolicious


【解决方案1】:

一般来说,您不能对您获得的当前工作目录做出假设。

use Cwd            qw( abs_path );
use File::Basename qw( dirname );

use constant PROJ_DIR => dirname(abs_path(__FILE__)) . '/..';

my $config_qfn = PROJ_DIR.'/project.json';

【讨论】:

  • 是的。但是,配置文件是通过Mojolicious::Plugin::JSONConfig 加载的,这在这种情况下会使事情复杂化;它应该默认为“在应用程序主目录中”查找。我可能是从错误的角度来的,尽管 blib 子目录似乎指向 Module::Build 参与其中,而 Mojo 应用程序似乎可以毫无问题地找到配置文件。我会进一步排查问题。
  • blib 是暂存目录。 make 步骤将要安装的文件放在blib 中(通过复制和创建它们),install 步骤将它们从blib 复制到它们的最终位置。 blib 在技术上是测试时的“应用程序的主目录”。
  • 澄清一下——即使在install 之后,test 不是总是与blib 中的文件相冲突吗?
  • 是的。 install 对暂存环境没有影响,因此您可以假装它从未发生过并继续运行测试。
猜你喜欢
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 2011-09-20
  • 1970-01-01
  • 2014-06-16
相关资源
最近更新 更多