Heroku - 无法通过 Play Framework 应用程序设置 postgres 数据库? [英] Heroku - Unable to setup postgres database through Play Framework app?

查看:23
本文介绍了Heroku - 无法通过 Play Framework 应用程序设置 postgres 数据库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过 play framework 应用程序在 heroku 上设置 postgres 数据库,但我不断收到有关我的 DATABASE_URL 的错误.

I am trying to setup postgres database on heroku through play framework app but i am keep getting an error regarding my DATABASE_URL.

堆栈跟踪:-

-----> Heroku receiving push
-----> Play 2.0 - Java app detected
-----> Running: sbt clean compile stage
       Getting net.java.dev.jna jna 3.2.3 ...
       :: retrieving :: org.scala-sbt#boot-jna
        confs: [default]
        1 artifacts copied, 0 already retrieved (838kB/25ms)
       Getting org.scala-tools.sbt sbt_2.9.1 0.11.2 ...
       :: retrieving :: org.scala-sbt#boot-app
        confs: [default]
        37 artifacts copied, 0 already retrieved (7324kB/78ms)
       Getting Scala 2.9.1 (for sbt)...
       :: retrieving :: org.scala-sbt#boot-scala
        confs: [default]
        4 artifacts copied, 0 already retrieved (19939kB/188ms)
       [info] Loading global plugins from /tmp/build_hdhsg4dgyxy/.sbt_home/.sbt/plugins
       [info] Updating {file:/tmp/build_hdhsg4dgyxy/.sbt_home/.sbt/plugins/}default-05c586...
       [info] Resolving org.scala-tools.sbt#sbt_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#main_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#actions_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#classfile_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#io_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#control_2.9.1;0.11.2 ...
       [info] Resolving org.scala-lang#scala-library;2.9.1 ...
       [info] Resolving org.scala-tools.sbt#interface;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#logging_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#process_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#classpath_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#launcher-interface_2.9.1;0.11.2 ...
       [info] Resolving org.scala-lang#scala-compiler;2.9.1 ...
       [info] Resolving org.scala-tools.sbt#incremental-compiler_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#collections_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#api_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#persist_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbinary#sbinary_2.9.0;0.4.0 ...
       [info] Resolving org.scala-tools.sbt#compile_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#ivy_2.9.1;0.11.2 ...
       [info] Resolving org.apache.ivy#ivy;2.2.0 ...
       [info] Resolving com.jcraft#jsch;0.1.31 ...
       [info] Resolving commons-httpclient#commons-httpclient;3.1 ...
       [info] Resolving commons-logging#commons-logging;1.0.4 ...
       [info] Resolving commons-codec#commons-codec;1.2 ...
       [info] Resolving org.scala-tools.sbt#completion_2.9.1;0.11.2 ...
       [info] Resolving jline#jline;0.9.94 ...
       [info] Resolving org.scala-tools.sbt#run_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#task-system_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#tasks_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#tracking_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#cache_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#testing_2.9.1;0.11.2 ...
       [info] Resolving org.scala-tools.testing#test-interface;0.5 ...
       [info] Resolving org.scala-tools.sbt#compiler-interface;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#precompiled-2_8_1;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#precompiled-2_8_0;0.11.2 ...
       [info] Resolving org.scala-tools.sbt#precompiled-2_9_0;0.11.2 ...
       [info] Done updating.
       [info] Compiling 1 Scala source to /tmp/build_hdhsg4dgyxy/.sbt_home/.sbt/plugins/target/scala-2.9.1/sbt-0.11.2/classes...
       [info] Loading project definition from /tmp/build_hdhsg4dgyxy/project
       [info] Set current project to PostDemo (in build file:/tmp/build_hdhsg4dgyxy/)
       [success] Total time: 0 s, completed Jun 28, 2012 2:20:47 AM
       [info] Updating {file:/tmp/build_hdhsg4dgyxy/}PostDemo...
[info] downloading http://repo.typesafe.com/typesafe/releases/postgresql/postgresql/9.1-901.jdbc4/postgresql-9.1-901.jdbc4.jar ...
       [info]   [SUCCESSFUL ] postgresql#postgresql;9.1-901.jdbc4!postgresql.jar (117ms)
       [info] Done updating.
       [info] Compiling 4 Scala sources and 4 Java sources to /tmp/build_hdhsg4dgyxy/target/scala-2.9.1/classes...
       [error] {file:/tmp/build_hdhsg4dgyxy/}PostDemo/compile:compile: com.typesafe.config.ConfigException$UnresolvedSubstitution: conf/application.conf: 37: Could not resolve substitution to a value: ${DATABASE_URL}
       [error] Total time: 10 s, completed Jun 28, 2012 2:20:57 AM
 !     Failed to build app with sbt
 !     Heroku push rejected, failed to compile Play 2.0 - java app
       error: failed to push some refs to 'git@heroku.com.git'

我使用以下命令将我的 DATABASE_URL 设置为环境变量:-

I set my DATABASE_URL as environment variable using the following command: -

echo "export DATABASE_URL=postgres://postgres:1234@localhost/Play">>.bash_profile
 . .bash_profile

我也尝试设置另一个 URL,我使用命令 heroku config 发现它是一个很长的 postgres URL,但它并没有很好地工作,并且每次都会出现相同的异常时间.

I tried to set another URL as well, which i found using command heroku config that i came to know is a big long postgres URL but it didn't work as well and same exception arising every time.

这是我在 application.conf 文件中添加的内容

Here is what i have added in my application.conf file

%prod.db=${DATABASE_URL}

依赖

val appDependencies = Seq(
   "postgresql" % "postgresql" % "9.1-901.jdbc4"
)

所以现在我对我的 DATABASE_URL 感到困惑.为什么 heroku 无法用合适的值替换它.heroku 在哪里寻找合适的 URL?在我的 application.conf 文件中还是在我系统的 bash 配置文件中设置的环境变量中?

So now i am confused about my DATABASE_URL. Why heroku is unable to substitue it with suitable value. Where does heroku looking for an appropriate URL? In my application.conf file or in environment variables set in my system's bash profile?

任何帮助将不胜感激.

谢谢

编辑

日志

2012-06-28 20:38:18,500 - [INFO] - from play in main 
Listening for HTTP on port 9000...

2012-06-28 20:38:25,862 - [INFO] - from play in play-akka.actor.default-dispatcher-1 
database [default] connected at jdbc:postgresql://localhost/Play

2012-06-28 20:38:27,470 - [ERROR] - from application in New I/O server worker #1-1 


! @6aoffk4jk - Internal server error, for request [GET /login/?username=abc&&password=abc] ->

play.api.db.evolutions.InvalidDatabaseRevision: Database 'default' needs evolution! [An SQL script need to be run on your database.]
    at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.scala:424) ~[play_2.9.1.jar:2.0.1]
    at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.scala:410) ~[play_2.9.1.jar:2.0.1]
    at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) ~[scala-library.jar:0.11.2]
    at scala.collection.immutable.List.foreach(List.scala:45) ~[scala-library.jar:0.11.2]
    at play.api.db.evolutions.EvolutionsPlugin.onStart(Evolutions.scala:410) ~[play_2.9.1.jar:2.0.1]
    at play.api.Play$$anonfun$start$1.apply(Play.scala:60) ~[play_2.9.1.jar:2.0.1]
    at play.api.Play$$anonfun$start$1.apply(Play.scala:60) ~[play_2.9.1.jar:2.0.1]
    at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) ~[scala-library.jar:0.11.2]
    at scala.collection.immutable.List.foreach(List.scala:45) ~[scala-library.jar:0.11.2]
    at play.api.Play$.start(Play.scala:60) ~[play_2.9.1.jar:2.0.1]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3$$anonfun$1.apply(ApplicationProvider.scala:125) ~[play_2.9.1.jar:2.0.1]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3$$anonfun$1.apply(ApplicationProvider.scala:112) ~[play_2.9.1.jar:2.0.1]
    at scala.Option.map(Option.scala:133) ~[scala-library.jar:0.11.2]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3.apply(ApplicationProvider.scala:112) ~[play_2.9.1.jar:2.0.1]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3.apply(ApplicationProvider.scala:110) ~[play_2.9.1.jar:2.0.1]
    at scala.Either$RightProjection.flatMap(Either.scala:277) ~[scala-library.jar:0.11.2]
    at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:110) ~[play_2.9.1.jar:2.0.1]
    at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:110) ~[play_2.9.1.jar:2.0.1]
    at akka.dispatch.Future$$anon$3.liftedTree1$1(Future.scala:195) ~[akka-actor.jar:2.0.1]
    at akka.dispatch.Future$$anon$3.run(Future.scala:194) ~[akka-actor.jar:2.0.1]
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:83) ~[akka-actor.jar:2.0.1]
    at akka.jsr166y.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1381) ~[akka-actor.jar:2.0.1]
    at akka.jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:259) ~[akka-actor.jar:2.0.1]
    at akka.jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974) ~[akka-actor.jar:2.0.1]
    at akka.jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1478) ~[akka-actor.jar:2.0.1]
    at akka.jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104) ~[akka-actor.jar:2.0.1]

2012-06-28 20:38:30,150 - [WARN] - from play in New I/O server worker #1-1 
Applying evolution script for database 'default':

# !!! WARNING! This script contains DOWNS evolutions that are likely destructives

# --- Rev:2,Downs - eddafc8
delete from admins;
delete from employees;

# --- Rev:2,Ups - 822c4da
insert into admins (username, password) values ('abc', 'abc');
insert into admins (username, password) values ('abc', 'abc');

insert into employees (id,name,email) values (1, 'Super Man', 'superman@superhero.com');
insert into employees (id,name,email) values (2, 'Bat man', 'batman@superhero.com');
insert into employees (id,name,email) values (3, 'Spider Man', 'spidy@superhero.com');
insert into employees (id,name,email) values (4, 'Iron Man', 'ironman@superhero.com');


2012-06-28 20:38:30,741 - [INFO] - from play in play-akka.actor.default-dispatcher-1 
database [default] connected at jdbc:postgresql://localhost/Play

2012-06-28 20:38:31,519 - [INFO] - from play in play-akka.actor.default-dispatcher-1 
Application started (Dev)

推荐答案

您似乎混合了一些 Play 1 和 Play 2 约定.看来您正在使用 Play 2.在 Play 2 中,最简单的设置方法是不在您的 application.conf 中使用 DATABASE_URL,而只是覆盖中的数据库配置你的Procfile:

It seems you are mixing some Play 1 and Play 2 conventions. It appears you are using Play 2. In Play 2 the easiest way to set this up is to not use DATABASE_URL in your application.conf and instead just override the database config in your Procfile:

web: target/start -Dhttp.port=$PORT -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=$DATABASE_URL

有关更详细的演练,请参阅我的Play 2 教程.

For a more detailed walk-through see my Play 2 Tutorial.

这篇关于Heroku - 无法通过 Play Framework 应用程序设置 postgres 数据库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆