2012-06-28 30 views
5

Tôi đang cố gắng thiết lập cơ sở dữ liệu postgres trên heroku thông qua ứng dụng khung chơi nhưng tôi vẫn gặp lỗi về DATABASE_URL của mình.Heroku - Không thể thiết lập cơ sở dữ liệu postgres thông qua ứng dụng Play Framework?

Stack trace: -

-----> 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 '[email protected]' 

tôi đặt DATABASE_URL của tôi như biến môi trường bằng cách sử dụng lệnh sau đây: -

echo "export DATABASE_URL=postgres://postgres:[email protected]/Play">>.bash_profile 
. .bash_profile 

Tôi cố gắng để thiết lập một URL khác là tốt, mà tôi tìm thấy cách sử dụng lệnh heroku config mà tôi đã biết là một URL postgres dài lớn nhưng nó không hoạt động tốt và cùng một ngoại lệ phát sinh mỗi lần.

Dưới đây là những gì tôi đã được thêm vào trong tập tin application.conf tôi

%prod.db=${DATABASE_URL} 

phụ thuộc

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

Vì vậy, bây giờ tôi đang bối rối về DATABASE_URL tôi. Tại sao heroku không thể thay thế nó bằng giá trị phù hợp. Heroku tìm kiếm một URL thích hợp ở đâu? Trong tệp application.conf hoặc trong các biến môi trường được đặt trong tiểu sử bash của hệ thống của tôi?

Mọi trợ giúp sẽ thực sự được đánh giá cao.

Cảm ơn

EDIT

Logs

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', '[email protected]'); 
insert into employees (id,name,email) values (2, 'Bat man', '[email protected]'); 
insert into employees (id,name,email) values (3, 'Spider Man', '[email protected]'); 
insert into employees (id,name,email) values (4, 'Iron Man', '[email protected]'); 


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) 
+1

Bạn có thấy một 'DATABASE_URL' giá trị niêm yết khi bạn chạy' Heroku config'? –

+0

@RyanDaigle Vâng tôi đã thấy. Tôi đã cố gắng sử dụng URL đó nhưng không may mắn. – Varundroid

Trả lời

18

Có vẻ như bạn đang trộn một số Chơi 1 and Play 2 ước. Có vẻ bạn đang sử dụng chơi 2. Trong Chơi 2 cách dễ nhất để thiết lập này là không sử dụng DATABASE_URL trong application.conf của bạn và thay vào đó chỉ ghi đè lên cấu hình cơ sở dữ liệu của bạn Procfile:

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

Đối với một walk- chi tiết hơn xem qua số Play 2 Tutorial của tôi.

+0

Cảm ơn tôi đã tìm ra. Cảm ơn bạn rất nhiều vì một hướng dẫn tuyệt vời. Nó sẽ giúp tôi rất nhiều. – Varundroid

+0

Đã chấp nhận câu trả lời và +1. – Varundroid

+0

Tôi gặp sự cố lạ khi triển khai ứng dụng của mình trên heroku. khi tôi triển khai nó lần đầu tiên, mọi thứ hoạt động tốt nhưng khi tôi triển khai nó lần thứ hai, nó đã đưa ra một lỗi Ứng dụng. Tôi đã xóa git, sử dụng heroku tạo một lần nữa và triển khai lại nó, trước tiên triển khai - làm việc tốt nhưng triển khai thứ hai - lỗi ứng dụng một lần nữa. Tôi nghĩ rằng sự tiến hóa của tôi làm một cái gì đó đầy cá ở đây. Bất kỳ ý tưởng nào có thể là lý do? – Varundroid

1

Sử dụng chơi 2.4, Slick 3.0.3 & postgres trong Heroku nó làm việc cho tôi cài đặt sau đó chạy sql của tôi phát triển các kịch bản:

trong build.sbt:

name := """app-name""" 

và thêm dòng sau trong libraryDependencies ++ = Seq (

"com.typesafe.play" %% "play-slick" % "1.0.1", 
"com.typesafe.play" %% "play-slick-evolutions" % "1.0.1", 
"com.typesafe.slick" %% "slick" % "3.0.3", 
"org.postgresql" % "postgresql" % "9.4-1201-jdbc41", 
"org.slf4j" % "slf4j-nop" % "1.6.4", 

trong application.conf:

slick.dbs.default.driver ="slick.driver.PostgresDriver$" 
slick.dbs.default.db.dataSourceClass = "slick.jdbc.DatabaseUrlDataSource" 
slick.dbs.default.db.properties.driver = "org.postgresql.Driver" 

và trong Procfile:

web: target/universal/stage/bin/app-name -Dhttp.port=${PORT} -Dplay.evolutions.db.default.autoApply=true 

Cheers

Các vấn đề liên quan