gpt4 book ai didi

mysql - 在 dev/prod 中使用 Mysql,在测试中使用 H2

转载 作者:可可西里 更新时间:2023-11-01 07:02:45 25 4
gpt4 key购买 nike

使用 play framework 2.1,我试图找到拥有两个不同数据库配置的最佳方式:

  • 一个基于mysql运行我的应用程序
  • 一个基于 H2 测试我的应用程序

虽然做其中一个很容易,但当我尝试同时做这两个时,我遇到了以下问题:

  1. 我不能有相同的数据库演变,因为有些 mysql 特定命令即使在 mysql 模式下也不能与 H2 一起使用:这意味着两组演变和两个单独的数据库名称
  2. 我不确定如何用另一个在测试模式下保留用于测试的文件覆盖主 application.conf 文件。我尝试的方法(从命令行传递文件名或覆盖键)似乎保留给生产模式。

我的问题:任何人都可以推荐一种好的方法来同时执行这两项操作(一直使用 mysql 并且仅在测试中使用 H2)而不会使应用程序的运行过于复杂吗? Google 没有帮助我。

感谢您的帮助。

最佳答案

您可能会发现一些有用的技巧。

首先,MySQL的/*! */ 符号允许您添加 MySQL 将遵守的代码,但其他数据库将忽略,例如:

create table Users (
id bigint not null auto_increment,
name varchar(40)
) /*! engine=InnoDB */

它不是 Elixir ,但可以让您掩盖 MySQL 和 H2 语法之间的一些差异。这是一个 MySQL 主义,所以它对其他数据库没有帮助,但由于大多数其他数据库不像 MySQL 那样古怪,你可能不需要它 - 我们将我们的数据库从 MySQL 迁移到 PostgreSQL,它不需要支持 /*! */ 符号,但 PostgreSQL 与 H2 非常相似,我们不需要它。

如果你想为开发和生产使用不同的配置,你可能最好为生产提供额外的配置。这样做的原因是您可能会使用 play run 启动您的开发服务器,并使用 play stage 启动您的生产服务器;目标/开始target/start 可以接受一个-Dconfig.resource 参数。例如,为 prod 创建一个额外的配置文件 prod.conf,如下所示:

include "application.conf"

# Extra config for prod - this will override the dev values in application.conf
db.default.driver=...
db.default.url=...
...

并创建一个如下所示的 start_prod 脚本:

#!/bin/sh

# Optional - you might want to do this as part of the build/deploy process instead
#play stage
target/start -Dconfig.resource=prod.conf

理论上,您可以反过来做,让 application.conf 包含 prod conf,并创建一个 dev.conf 文件,但是您无论如何,您可能都需要一个脚本来启动产品(您可能最终需要额外的 JVM/内存/GC 参数,或者将其添加到 rc.d,或其他任何内容)。

关于mysql - 在 dev/prod 中使用 Mysql,在测试中使用 H2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15885814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com