Heroku不能替换配置中的DATABASE_URL(db = $ {DATABASE_URL})

时间:2014-02-22 03:29:45

标签: database heroku deployment playframework playframework-1.x

我有一个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。

1 个答案:

答案 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