Play framework 2.0.1 keeps trying to evolve wrong

2019-05-17 19:47发布

I'm working on play 2.0.1 application deployed on openshift DIY-application. I'm having troble with the database because play keeps trying to evolve the wrong database. I have a mysql database and play creates an H2 database evolution script. Here are the scripts.

What he is trying to create

create table gif (
id                        bigint not null,
title                     varchar(255),
add_date                  timestamp,
gif_url                   varchar(255),
img_source                varchar(5000),
web_id                    varchar(255),
found_on                  varchar(255),
thumbnail                 varchar(255),
version                   integer not null,
constraint pk_gif primary key (id))
;

create table task (
id                        bigint not null,
action                    varchar(255),
queue                     integer,
type                      varchar(255),
object_id                 bigint,
params                    varchar(255),
working_on                boolean,
version                   integer not null,
constraint pk_task primary key (id))
;

create sequence gif_seq;

create sequence task_seq; 

What it should create

# --- Created by Ebean DDL
# To stop Ebean DDL generation, remove this comment and start using Evolutions

# --- !Ups

create table gif (
  id                        bigint auto_increment not null,
  title                     varchar(255),
  add_date                  datetime,
  gif_url                   varchar(255),
  img_source                varchar(5000),
  web_id                    varchar(255),
  found_on                  varchar(255),
  thumbnail                 varchar(255),
  version                   integer not null,
  constraint pk_gif primary key (id))
;

create table task (
  id                        bigint auto_increment not null,
  action                    varchar(255),
  queue                     integer,
  type                      varchar(255),
  object_id                 bigint,
  params                    varchar(255),
  working_on                tinyint(1) default 0,
  version                   integer not null,
  constraint pk_task primary key (id))
;

My application.conf

# This is the main configuration file for the application running on openshift.
# ~~~~~

include "application"

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions.
# If you deploy your application to several instances be sure to use the same key!
application.secret="TsLWj4[^1N<7lkdhfaiusjdpoifnsaodfEkyPDTO[dnh<7_R[j;cN0:lGK6Mm`0048C@3PK]4KR6HobL"

# Openshift database configuration
# ~~~~~
# You can declare as many datasources as you want.
# By convention, the default datasource is named `default`
#
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://"${OPENSHIFT_DB_HOST}":"${OPENSHIFT_DB_PORT}/${OPENSHIFT_APP_NAME}
db.default.user=${OPENSHIFT_DB_USERNAME}
db.default.password=${OPENSHIFT_DB_PASSWORD}

#db.default.driver=org.h2.Driver
#db.default.url="jdbc:h2:mem:play"
#db.default.user=sa
#db.default.password=""
#
# You can expose this datasource via JNDI if needed (Useful for JPA)
# db.default.jndiName=DefaultDS


ebean.default= "models.*"

#Akka
akka.default-dispatcher.fork-join-executor.pool-size-max = 64
akka.actor.debug.receive = on
# Logger
# ~~~~~
# You can also configure logback (http://logback.qos.ch/), by providing a logger.xml file in the conf directory .

# Root logger:
logger.root=ERROR

# Logger used by the framework:
logger.play=INFO

# Logger provided to your application:
logger.application=DEBUG

# openshift action_hooks scripts configuration
# ~~~~~
openshift.play.params="-DapplyEvolutions.default=true"

I execute it with this code:

target/start \
    -Dhttp.port=8080 \
    -Dhttp.address=${OPENSHIFT_INTERNAL_IP} \
    -Dconfig.resource=openshift.conf

3条回答
老娘就宠你
2楼-- · 2019-05-17 20:07

I opened this issue - as this seems to happen only when trying to run with evolutions when in "production" mode (via play start, for example):

https://github.com/playframework/playframework/issues/1410

I have seen this from my desktop - nothing to do with any cloud provider.

查看更多
我命由我不由天
3楼-- · 2019-05-17 20:18

I just encountered the same issue with my own project and I think I know what happened. I am using ANT to build my project. This problem only occurs When I ran the unit test before "play start".

In my unit test codes, I am testing it using H2DB. As a result, play spits out 1.sql in H2 syntax, which replaces the original 1.sql created for mysql database. After the test is run, play saw that 1.sql already exists so it wont bother generate another one and use the one generated for H2DB and the error occurs. My solution is to delete 1.sql after running unit tests in my Ant script. Hope this helps.

查看更多
Anthone
4楼-- · 2019-05-17 20:20

I noticed the MySQL environment variables in your application.conf are incorrect. The correct MySQL environment variable names are:

OPENSHIFT_MYSQL_DB_HOST
OPENSHIFT_MYSQL_DB_PORT
OPENSHIFT_MYSQL_DB_USERNAME
OPENSHIFT_MYSQL_DB_PASSWORD

Although I can't test your configuration to see if this change solves your problem, the incorrect variable names seemed worth pointing out.

查看更多
登录 后发表回答