使用 exrm 测试 elixir 发布版本

Testing elixir release build with exrm

我正在使用 exrm 构建 phoenix 应用程序。

好的做法表明,我应该针对相同的二进制文件进行测试,我将推动生产。

Exrm 让我能够在没有安装 Erlang 或 Elixir 的机器上部署 phoenix,这使得提取 docker 图像更快。

有没有办法针对 exrm 构建的二进制文件启动 mix test

请注意,发行版不是二进制文件。当然它们被打包成一个 tarball,但这只是为了简化部署,它包含的实际上是 MIX_ENV=prod mix compile 生成的二进制 .beam 文件,加上 ERTS(如果你捆绑它),Erlang/Elixir .beam 个文件,以及用于启动应用程序的引导 scripts/config 个文件等

所以简而言之,您的代码在发行版中的行为将与 运行 MIX_ENV=prod 时的行为相同(假设您 运行 MIX_ENV=prod mix release)。唯一的实际区别是您是否已正确配置您的应用程序以打包在一个版本中,测试这归结为对 /tmp/<app> 进行测试部署并启动它以确保您没有忘记在 mix.exs.

中添加对 applications 的依赖

您需要测试的另一个因素是,如果您对应用程序进行热 upgrades/downgrades,在这种情况下,您需要在本地进行测试部署以确保应用 upgrade/downgrade正如预期的那样,因为 exrm 为您生成默认的 .appup 文件,这些文件可能并不总是做正确的事情,或者您需要它们做的所有事情,在这种情况下,您需要适当地编辑它们。我通过部署到 /tmp/<app> 来启动旧版本,然后将升级 tarball 部署到 /tmp/<app>/releases/<new version>/<app>.tar.gz 和 运行 /tmp/<app>/bin/<app> upgrade <version> 并测试应用程序是否按预期升级,然后运行之前版本的降级命令,看是否正常回滚。测试的性质因您所做的代码更改而异,但这就是它的要点。

希望这有助于回答您的问题!