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
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.
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.
I noticed the MySQL environment variables in your
application.conf
are incorrect. The correct MySQL environment variable names are:Although I can't test your configuration to see if this change solves your problem, the incorrect variable names seemed worth pointing out.