标签: playframework-evolutions

滚动进化回来

这个问题可能看起来很愚蠢,但我找不到任何有关如何在Play 2.0中回滚演变的说明.谷歌只发现一个页面,说明进化文件的"唐氏"部分用于那个,而这就是全部.任何指针或说明将不胜感激.

revert playframework-2.0 playframework-evolutions

21
推荐指数
2
解决办法
4398
查看次数

如何在生产中处理Play Framework 2数据库演变

似乎每当我更改模型时,Play Framework都会要求我运行一个删除整个模式并重新创建它的脚本.显然这不适合生产,那么在生产中处理这个问题的正确方法是什么?

注意,我正在使用ebean和Postgres,并在heroku上托管.

java postgresql playframework playframework-2.0 playframework-evolutions

16
推荐指数
2
解决办法
1万
查看次数

如何使用Slick和Play在测试中应用手动演变!2.4

我想在每个测试文件的开头手动运行我的evolution脚本.我正在玩Play!2.4和Slick 3.

根据文档,走的路似乎是:

Evolutions.applyEvolutions(database)
Run Code Online (Sandbox Code Playgroud)

但我无法获得我的数据库实例.在导入文档 play.api.db.Databases以获取数据库实例但是如果我尝试导入它,我收到此错误:object Databases is not a member of package play.api.db

如何获取我的数据库实例才能运行evolution脚本?

编辑:如评论中所述,这里是给出错误的完整源代码:

import models._
import org.scalatest.concurrent.ScalaFutures._
import org.scalatest.time.{Seconds, Span}
import org.scalatestplus.play._
import play.api.db.evolutions.Evolutions
import play.api.db.Databases

class TestAddressModel extends PlaySpec with OneAppPerSuite {
   lazy val appBuilder = new GuiceApplicationBuilder()
   lazy val injector = appBuilder.injector()
   lazy val dbConfProvider = injector.instanceOf[DatabaseConfigProvider]

  def beforeAll() = {
    //val database: Database = ???
    //Evolutions.applyEvolutions(database)
  }

  "test" must { 
     "test" in { } 
  } 
}
Run Code Online (Sandbox Code Playgroud)

scala playframework playframework-evolutions slick-3.0

11
推荐指数
1
解决办法
2982
查看次数

如何在Play框架中使用evolutions在PostgreSQL中创建一个函数?

使用Play Framework 2.1

我在我的演变中定义了以下SQL:

CREATE OR REPLACE FUNCTION idx(myArray anyarray, myElement anyelement) RETURNS int AS $$
 SELECT i FROM (
  SELECT generate_series(array_lower(myArray,1),array_upper(myArray,1))
 ) g(i)
 WHERE myArray[i] = anyElement
 LIMIT 1; $$ LANGUAGE sql IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)

当我执行演变时,我收到以下错误:

We got the following error: ERROR: unterminated dollar-quoted string at or near 
"$$ SELECT i FROM ( SELECT generate_series(array_lower(myArray,1),
 array_upper(myArray,1)) ) g(i) WHERE myArray[i] = anyElement LIMIT 1" Position:
 87 [ERROR:0, SQLSTATE:42601], while trying to run this SQL script:
Run Code Online (Sandbox Code Playgroud)

我正在使用PostgreSQL驱动程序版本9.1-901.jdbc4.

我查看了postgres查询日志,发现Play正在尝试执行以下操作:

LOG:  execute <unnamed>: insert …
Run Code Online (Sandbox Code Playgroud)

postgresql jdbc postgresql-9.2 playframework-2.1 playframework-evolutions

9
推荐指数
1
解决办法
1992
查看次数

在多个数据库上排序播放演变

我有一个环境,我正在使用多个数据库(A和B),每个数据库都有不同的演变集,因此完全成功.但是,总是首先应用一组数据库演进,B数据库的所有演进都在A数据库的任何演进之前应用.

我们正在做一些重大的重组,这导致一些跨数据库查询将数据库B移到未来,但由于数据库B的演变首先运行,数据库A的更改尚未发生,并且演变失败.

有没有办法改变/优先考虑使用不同演变集在多个数据库之间应用数据库演变的顺序?

playframework playframework-evolutions playframework-2.2

9
推荐指数
1
解决办法
185
查看次数

如何在play-framework中运行测试时应用play-evolutions?

使用play框架运行测试时,我遇到了进化问题

  • 用于scala的playframework v2.6.6
  • play-slick v3.0.2
  • play-slick-evolutions v3.0.2

测试看起来像这样:

class TestFooController extends PlaySpec with GuiceOneServerPerSuite {
  "foo endpoint should store some data" in {
    val wsClient = app.injector.instanceOf[WSClient]
    val url = s"http://localhost:$port/foo"
    val requestData = Json.obj("foo" -> "bar")
    val response = await(wsClient.url(url).post(requestData))
    response.status mustBe OK
  }
}
Run Code Online (Sandbox Code Playgroud)

数据库配置如下所示:

slick.dbs.default.driver="slick.driver.H2Driver$"
slick.dbs.default.db.driver="org.h2.Driver"
slick.dbs.default.db.url="jdbc:h2:mem:play"
Run Code Online (Sandbox Code Playgroud)

假设有一个创建表的进化脚本,foos这个脚本在开发模式下工作正常.

运行测试时,抛出以下错误:

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[JdbcSQLException: Table "foos" not found;

foos无法找到该表,因此我假设尚未应用数据库演变.

然后我将数据库配置更改为在开发模式下使用的postgresql.

slick.dbs.default.driver = "slick.driver.PostgresDriver$"
slick.dbs.default.db.driver = "org.postgresql.Driver"
slick.dbs.default.db.url = "jdbc:postgresql://localhost:5432/foo-test"
slick.dbs.default.db.user = "user"
slick.dbs.default.db.password = "password"
Run Code Online (Sandbox Code Playgroud)

使用此配置,测试工作正常,数据存储在数据库中,因此数据库演进运行得很好. …

scala playframework playframework-evolutions play-slick playframework-2.6

9
推荐指数
1
解决办法
855
查看次数

Play Framework 2 Ebean指定字段的默认值

我在Play Framework 2中有一个简单的模型,如果执行INSERT时没有提供,我想指定一个默认值插入指定的INT列.

模型:

@Entity
@Table(name = "DashboardOptions", schema = "dbo")
public class DashboardOptions extends Model implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    public Long id;

    @Basic(optional = false)
    @Column(name = "userId")
    public Long userId;

    @Column(name = "chartType")
    public String chartType;

    public String name;

    public Integer size = 2;
Run Code Online (Sandbox Code Playgroud)

我希望默认情况下size填充列2,但是,如果我指定上面的默认值,我的数据库演变不会反映这一点:

create table dbo.DashboardOptions (
id                        numeric(19) identity(1,1) not null,
userId                    numeric(19) not null, …
Run Code Online (Sandbox Code Playgroud)

java ebean playframework-evolutions playframework-2.2

7
推荐指数
1
解决办法
6434
查看次数

在Play Framework 2.4中播放Evolutions和JPA

我将Play项目从版本2.3.4迁移到2.4.2.这些项目使用JPA(Hibernate)和Evolutions.我有一个最初的Evolutions SQL脚本,它用一些示例数据填充数据库.此脚本现在不再起作用,因为Evolutions脚本现在在Hibernate生成表之前执行,这显然会导致错误.这是一个理想的行为吗?有没有办法改变执行顺序?

hibernate jpa playframework playframework-evolutions playframework-2.4

7
推荐指数
1
解决办法
629
查看次数

如何从外部文件夹或外部jar加载Evolutions脚本(数据库迁移脚本)?

我们正在使用Play 2.7(Java)进行制作.我们有一组常见的Ebean模型(作为外部库/ jar),它们在不同的Play项目之间共享,但我们因Play Evolutions脚本而陷入困境.有没有什么方法可以从外部文件夹/ jar加载这些脚本(.sql文件)?有没有人试过这个?

已经尝试在线搜索解决方案但没有用.需要有Play游戏经验的人的帮助.还请建议是否有其他方法来解决问题.感谢您的帮助!

目前,该项目正在从这里运行这些迁移脚本:

--> project
    --> app
    --> conf
        --> evolutions
            --> default <-- from here
Run Code Online (Sandbox Code Playgroud)

我想从这里的某个地方加载这些脚本:

--> project
    --> app
--> External Libraries
    --> group.artifact.version.jar
        --> models
            --> default <-- from here
Run Code Online (Sandbox Code Playgroud)

java playframework-evolutions playframework-2.2

7
推荐指数
0
解决办法
65
查看次数

Play Framework 2.1.1部署问题

所以,我正在尝试部署我非常简单的Play Framework 2.1.1应用程序,但每当我通过端口命令行传递标志并应用数据库演变时,它们都会被忽略.

例如:

sudo play start -Dhttp.port = 80 -DapplyEvolutions.default = true

使用此命令,服务器将无法启动.port和applyEvolutions = true标志都被完全忽略,它会抛出此错误:

[warn] play - 你的生产数据库[默认]需要进化![warn] play - 运行-DapplyEvolutions.default = true如果你想自动运行它们(小心)哎呀,无法启动服务器.@ 6elhl9mca:数据库'默认'需要进化!

我已经尝试了所有我能想到的无济于事的东西.在我的本地机器上使用Play Run工作正常,没有问题.服务器正在运行Ubuntu 12.04.所有正确的驱动程序和连接字符串都存在并经过测试,数据库正在运行,除了Play Framework之外,一切正常运行.

java playframework-2.0 playframework-2.1 playframework-evolutions

6
推荐指数
2
解决办法
5635
查看次数