我有一个heroku play 1.2.7
应用程序,与我提供的postgres数据库结合使用得很好,这是我第一次部署它。我没有更改数据库url的值,但是,因为,我推了其他提交,在部署期间,heroku告诉我:
WARNING: Cannot replace DATABASE_URL in configuration (db=${DATABASE_URL})
然而,命令heroku配置说:
=== task-reminder Config Vars
DATABASE_URL: postgres://zbvzcfzez...amazonaws.com:5432/d4cqrc8kc4tisk
HEROKU_POSTGRESQL_GREEN_URL: postgres://zbvzcfzez...amazonaws.com:5432/d4cqrc8kc4tisk
当我尝试在生产中访问我的应用程序时,如果我执行访问数据库的操作,那么我有错误...
最重要的是,我会就如何部署我的应用程序提出任何建议,而无需推送到git。
答案 0 :(得分:1)
您的错误是由于您的表尚未在生产中创建的。如果你看一下heroku日志,你会看到类似这样的东西:
错误:关系xxxxx不存在
在制作模式下,Play不会自动为您创建表格。相反,它使用您的数据库演进文件(在 db / evolutions 文件夹中)。
所以他们是两个解决方案:
首先,您可以在application.conf文件中以生产模式启用自动架构更新。
%prod.jpa.ddl = update
%prod.evolutions.enabled = false
这将在模型更改时更新数据库架构。但它虽然危险但并不推荐,因为它可能会导致数据丢失。
第二种解决方案是使用进化。在您的application.conf文件中
%prod.jpa.ddl = none
%prod.evolutions.enabled = true
然后在 db / evolutions 文件夹中创建一个名为 1.sql 的文件。此文件应该负责创建所有表:
# --- !Ups
CREATE TABLE mymodel (
id bigint NOT NULL,
created timestamp without time zone,
updated timestamp without time zone,
email character varying(255),
name character varying(255)
);
ALTER TABLE ONLY mymodel
ADD CONSTRAINT mymodel PRIMARY KEY (id);
Create other tables here
....
# --- !Downs
DROP table mymodel;
....
将代码推送到Heroku之后,必须先运行db evolutions:
heroku run play evolutions:apply
然后重新启动Heroku服务器
heroku restart
然后你应该没事。您可以在此处阅读有关Play 1.x演变的更多信息http://www.playframework.com/documentation/1.2.7/evolutions