2013-04-17 12 views
1

如果已經得到回答,我很抱歉;我的搜索沒有顯示任何一個。Heroku工人的工作。如何設置工作進程以及播放框架web

我在Heroku上部署了一個應用程序。在同一個版本中,我還有另一個Worker類和main方法。我想將這個類作爲工作者而不是網頁來運行。當我嘗試運行它時,它給了我ClassDefNotFound異常,這很明顯,因爲我沒有爲此過程提供類路徑。

我該如何弄清楚應該是什麼類路徑(罐子和類都)?或者有沒有其他的方式來做到這一點?

將類分開工作進程的原因是要獨立於Web應用程序進行擴展。

這裏有更多的細節。我Procfile有以下條目,

web: target/start -Dhttp.port=$PORT -DapplyEvolutions.default=true -DapplyDownEvolutions.default=true -Ddb.default.url=$DATABASE_URL ${JAVA_OPTS} 
worker: target/start com/company/test/worker/WorkerApplication ${JAVA_OPTS} 

作業人員進入有類「WorkerApplication」,它需要運行,但是Heroku的是無法找到這些類文件和其他依賴的唯一名字。

回答

3

您需要在項目中爲每個入口點使用不同名稱創建多個Global objects。然後在你的Procfile,您指定要啓動哪一個與application.global屬性,像這樣:

web:  target/start -Dhttp.port=${PORT} ${JAVA_OPTS} -Dapplication.global=Web 
worker: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} -Dapplication.global=Worker 

我還沒有一個遊戲項目嘗試這樣做,但你也許還可以得到它一起工作sbt-start-script plugin用正確的類路徑創建自定義target/start腳本。

+0

通過使用相同的$ {}港兩次不,我們有端口上的衝突? Heroku是否使用不同的端口設置運行工作進程? – anfuerer

+0

Procfile的每一行都有自己的dyno(即容器)和自己的端口運行,所以沒有端口衝突。 – ryanbrainard

+0

在我的Play版本(2.0.4)中,這是-Dglobal = ...,而不是-Dapplication.global = ... - 請注意文檔不正確:http://www.playframework.com/documentation/ 2.0.4/ScalaGlobal – jsalvata

1

好吧,我想通了。目標/開始是針對網絡而不是工作者。我在目標/舞臺文件夾中找到了所有的罐子。改變工作人員以下工作正常。

工人:java命令「目標/上演/ *」 COM /公司/測試/工人/ WorkerApplication