我正在使用带有共享数据库的Heroku实例使用Play 1.2.3应用程序(Java)。
我的问题是:部署应用程序后如何更新数据库架构?实际上,如何初始化数据库,因为它最初为空并且PROD模式下的Hibernate ddl被禁用了?
关于我尝试过的选项:
这是一个问题,因为免费数据库(15美元/月)与提供Psql访问权限最便宜的选项(200美元/月)之间的成本差异很大,并且对于自助式“测试水域”网站而言这很重要。
你们有这个问题吗?你是怎么解决的?
答案 0 :(得分:3)
我使用这个:https://github.com/ddollar/heroku-sql-console。 它只是在您的设置中为您提供了一个SQL控制台 - 我没有尝试执行脚本。
答案 1 :(得分:2)
Heroku共享数据库的一个替代方案是在AWS上使用另一个数据库(您自己的EC2服务器或RDS数据库)。
但是,如果您想坚持使用共享数据库,那么您需要一些方法在Heorku上执行db脚本。有几种不同的方法可以做到这一点。 Play Evolutions是一个选项,但由于您不想使用它们,您可以使用类似iBatis ScriptRunner的东西。创建一个可以运行sql脚本的简单Java应用程序。这是一个非常简单的例子:
String dbUri = System.getenv("DATABASE_URL");
Class.forName("org.postgresql.Driver");
String username = dbUri.getUserInfo().split(":")[0];
String password = dbUri.getUserInfo().split(":")[1];
String dbUrl = "jdbc:postgresql://" + dbUri.getHost() + dbUri.getPath() + "?user=" + username + "&password=" + password;
Connection connection = DriverManager.getConnection(dbUrl);
InputStreamReader inputStreamReader = new InputStreamReader(ClassLoader.getSystemResourceAsStream(sqlFile));
Reader reader = new BufferedReader(inputStreamReader);
ScriptRunner scriptRunner = new ScriptRunner(connection, false, true);
scriptRunner.runScript(reader);
只需在app dir的某处放置类似于某个类的内容,然后运行类似:
heroku run "java -cp lib/postgres.jar:tmp/classes foo.SchemaCreator"