Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utiliser Mysql en dev/prod et H2 en test

Il existe quelques astuces qui pourraient vous être utiles.

Tout d'abord, le /*! */ La notation vous permet d'ajouter du code auquel MySQL obéira, mais que d'autres bases de données ignoreront, par exemple :

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

Ce n'est pas une solution miracle, mais cela vous permettra de passer en revue certaines des différences entre MySQL et la syntaxe de H2. C'est un MySQL-ism, donc cela n'aidera pas avec d'autres bases de données, mais comme la plupart des autres bases de données ne sont pas aussi originales que MySQL, vous n'en auriez probablement pas besoin - nous avons migré notre base de données de MySQL vers PostgreSQL, ce qui ne fonctionne pas supporte le /*! */ notation, mais PostgreSQL est suffisamment similaire à H2 pour que nous n'en ayons pas besoin.

Si vous souhaitez utiliser une configuration différente pour le développement et la production, il est probablement préférable d'avoir une configuration supplémentaire pour la production. La raison en est que vous allez probablement démarrer votre serveur de développement avec play run , et démarrez votre serveur de production avec play stage; target/start . target/start peut prendre un -Dconfig.resource paramètre. Par exemple, créez un fichier de configuration supplémentaire prod.conf pour la prod qui ressemble à :

include "application.conf"

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

et créer un start_prod script qui ressemble à :

#!/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

En théorie, vous pourriez le faire dans l'autre sens et avoir application.conf contenir la prod conf, et créer un dev.conf fichier, mais vous voudrez probablement qu'un script démarre prod de toute façon (vous finirez probablement par avoir besoin de paramètres JVM/mémoire/GC supplémentaires, ou pour l'ajouter à rc.d, ou autre).