Play framework 2.0.1 продолжает пытаться развивать неправильный тип базы данных

Я работаю над приложением play 2.0.1, развернутым в DIY-приложении openshift. У меня проблемы с базой данных, потому что игра продолжает пытаться развить неправильную базу данных. У меня есть база данных mysql, и игра создает сценарий эволюции базы данных H2. Вот скрипты.

Что он пытается создать

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; 

Что он должен создать

# --- 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))
;

Мое приложение.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"

Я выполняю его с помощью этого кода:

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

person Maurizio Pozzobon    schedule 27.06.2012    source источник
comment
Таким образом, разница только в том, что auto_increment используется/не используется для primary key? Это не относится к MySQL или H2 (обе базы данных поддерживают обе).   -  person Thomas Mueller    schedule 28.06.2012
comment
проблема в том, что «создать последовательность» не поддерживается MySQL, поэтому происходит сбой, когда игра пытается развить базу данных.   -  person Maurizio Pozzobon    schedule 28.06.2012
comment
каково имя и путь вашего файла эволюции для mysql?   -  person ndeverge    schedule 28.06.2012
comment
play создает их в conf/evolutions/default/1.sql   -  person Maurizio Pozzobon    schedule 29.06.2012


Ответы (3)


Я заметил, что переменные среды MySQL в вашем application.conf неверны. Правильные имена переменных среды MySQL:

OPENSHIFT_MYSQL_DB_HOST
OPENSHIFT_MYSQL_DB_PORT
OPENSHIFT_MYSQL_DB_USERNAME
OPENSHIFT_MYSQL_DB_PASSWORD

Хотя я не могу проверить вашу конфигурацию, чтобы увидеть, решит ли это изменение вашу проблему, мне показалось, что неправильные имена переменных заслуживают внимания.

person Dan Mace    schedule 21.02.2013

Я открыл эту проблему - так как это, кажется, происходит только при попытке запуска с эволюцией в "производственном" режиме (например, через запуск воспроизведения):

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

Я видел это со своего рабочего стола — ничего общего с облачным провайдером.

person Michael Neale    schedule 31.07.2013

Я только что столкнулся с той же проблемой в своем собственном проекте, и я думаю, что знаю, что произошло. Я использую ANT для создания своего проекта. Эта проблема возникает только тогда, когда я запускаю модульный тест перед «началом воспроизведения».

В своих кодах модульных тестов я тестирую его с помощью H2DB. В результате игра выдает 1.sql в синтаксисе H2, который заменяет исходный 1.sql, созданный для базы данных mysql. После запуска теста play увидел, что 1.sql уже существует, поэтому он не будет генерировать другой и использовать тот, который создан для H2DB, и возникает ошибка. Мое решение состоит в том, чтобы удалить 1.sql после запуска модульных тестов в моем скрипте Ant. Надеюсь это поможет.

person Eddie Chen    schedule 25.05.2014