Ore-play - Scala port of Ore

As some of you may already know, I’ve been working on a port of the Ore project to Scala with the Play Framework ( https://github.com/windy1/ore-play ). I’ve now made it available to play around with on heroku for anyone who may be interested and will be updating it periodically.

https://ore.herokuapp.com/

Please keep in mind that this is still very much in progress and there are many planned changes / features that I simply have not gotten around to doing yet. Also, due to this being a free project on Heroku, it is only available for 18 out of 24 hours of each day.

EDIT: Also keep in mind the database will need to be reset fairly often because heroku has non-persistent file storage.

EDIT 2:

New URL: https://ore-staging.spongepowered.org/
New Repo: GitHub - SpongePowered/Ore: Repository software for Sponge plugins and Forge mods

9 Likes

Question: why another ore?

I decided to start working on this because @gratimax is no longer with Sponge (at least for the time being) and Ore has been pretty much at a standstill for a good while now.

2 Likes

Note bad! (And pretty!)

Doesn’t have the nice dropdown menu as the rest of sponge does (:stuck_out_tongue:), and the markdown-code-formatting is a little messed up, but it looks nice!

Well done! :smile:

Thanks glad you like it. I’ll probably add that drop down eventually along with a bunch of other UI changes and github flavored markdown is something I would like to support eventually as well.

3 Likes

I’m trying to run ore but I keep getting

[error] (*:update) sbt.ResolveException: unresolved dependency: org.spongepowered#sponge-play_2.11;1.0.0-SNAPSHOT: not found [error] unresolved dependency: org.spongepowered#play-discourse_2.11;1.0.0-SNAPSHOT: not found

What do I do to fix this?

Hi sorry, the setup documentation is a tad out of date. There are now those two external dependencies that have not yet been deployed to a maven repository.

What you can do in the mean time is clone

And

And run sbt publish-local or activator publish-local on each of them. After that you should be able to build Ore.

Thank you! :slight_smile:
I ran those two earlier thinking it would fix it, but I did sbt run instead of sbt publish-local

1 Like

Is there anything else in the Config I have to change that’s not documented?

After setting application.fakeUser to true and code>discourse.api.enabled to code>false I get this error when trying to load the page.

[details=Old Error Message]p.c.s.n.PlayRequestHandler - Exception caught in Netty java.lang.NoClassDefFoundError: Could not initialize class play.api.http.DefaultHttpErrorHandler$ at play.core.server.Server$class.logExceptionAndGetResult$1(Server.scala:45) at play.core.server.Server$class.getHandlerFor(Server.scala:65) at play.core.server.NettyServer.getHandlerFor(NettyServer.scala:47) at play.core.server.netty.PlayRequestHandler.handle(PlayRequestHandler.scala:82) at play.core.server.netty.PlayRequestHandler.channelRead(PlayRequestHandler.scala:163) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345) at com.typesafe.netty.http.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:129) at com.typesafe.netty.http.HttpStreamsServerHandler.channelRead(HttpStreamsServerHandler.java:96)[/details]

Edit

Found my issue to just be not running activator publish-local

But now I have a new error

[details=New error message]scala.pickling.PicklingException: Not a primitive: scala.Nothing, found JNothing at sbt.serialization.json.VerifyingJSONPickleReader.sbt$serialization$json$VerifyingJSONPickleReader$$unpickleHelper$1(JSONPickleFormat.scala:367) at sbt.serialization.json.VerifyingJSONPickleReader.readPrimitive(JSONPickleFormat.scala:373) at scala.pickling.pickler.PrimitivePickler.unpickle(Primitives.scala:28) at play.forkrun.protocol.Serializers$PlayForkrunProtocolForkConfigUnpickler$macro$14$2$.unpickle(Serializers.scala:73) at scala.pickling.Unpickler$class.unpickleEntry(Pickler.scala:79) at play.forkrun.protocol.Serializers$PlayForkrunProtocolForkConfigUnpickler$macro$14$2$.unpickleEntry(Serializers.scala:73) at scala.pickling.functions$.unpickle(functions.scala:11) at sbt.serialization.JsonValue$$anonfun$parse$1.apply(SerializedValue.scala:104) at scala.util.Try$.apply(Try.scala:192) at sbt.serialization.JsonValue.parse(SerializedValue.scala:104) at sbt.protocol.BuildValue.value(Values.scala:11) at sbt.protocol.TaskSuccess.resultWithCustomThrowable(Values.scala:65) at sbt.protocol.TaskResult$class.result(Values.scala:56) at sbt.protocol.TaskSuccess.result(Values.scala:62) at play.forkrun.ForkRun$$anonfun$settingUp$1.applyOrElse(ForkRun.scala:166) at akka.actor.Actor$class.aroundReceive(Actor.scala:465) at play.forkrun.ForkRun.aroundReceive(ForkRun.scala:153) at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516) at akka.actor.ActorCell.invoke(ActorCell.scala:487) at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254) at akka.dispatch.Mailbox.run(Mailbox.scala:221) at akka.dispatch.Mailbox.exec(Mailbox.scala:231) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) Play fork run has failed due to: scala.pickling.PicklingException: error in unpickle of primitive unpickler 'java.lang.Integer': tag in unpickle: 'scala.Nothing' message: Not a primitive: scala.Nothing, found JNothing at scala.pickling.pickler.PrimitivePickler.unpickle(Primitives.scala:31) at play.forkrun.protocol.Serializers$PlayForkrunProtocolForkConfigUnpickler$macro$14$2$.unpickle(Serializers.scala:73) at scala.pickling.Unpickler$class.unpickleEntry(Pickler.scala:79) at play.forkrun.protocol.Serializers$PlayForkrunProtocolForkConfigUnpickler$macro$14$2$.unpickleEntry(Serializers.scala:73) at scala.pickling.functions$.unpickle(functions.scala:11) at sbt.serialization.JsonValue$$anonfun$parse$1.apply(SerializedValue.scala:104) at scala.util.Try$.apply(Try.scala:192) at sbt.serialization.JsonValue.parse(SerializedValue.scala:104) at sbt.protocol.BuildValue.value(Values.scala:11) at sbt.protocol.TaskSuccess.resultWithCustomThrowable(Values.scala:65) at sbt.protocol.TaskResult$class.result(Values.scala:56) at sbt.protocol.TaskSuccess.result(Values.scala:62) at play.forkrun.ForkRun$$anonfun$settingUp$1.applyOrElse(ForkRun.scala:166) at akka.actor.Actor$class.aroundReceive(Actor.scala:465) at play.forkrun.ForkRun.aroundReceive(ForkRun.scala:153) at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516) at akka.actor.ActorCell.invoke(ActorCell.scala:487) at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254) at akka.dispatch.Mailbox.run(Mailbox.scala:221) at akka.dispatch.Mailbox.exec(Mailbox.scala:231) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[/details]

Edit 2

I’m just getting both errors randomly now

I’m not sure about that second one but the first error usually indicates there is something wrong with the config. Make sure you rename application.conf.template to application.conf and replace any environment variables in the config that are not set. Usually I give the config values that are substituted with environment variables a default value but I just realized I forgot to add defaults for some values I recently changed.

@windy I just noticed there are some named “Change Me” but they’re either API keys or "secret"s. I don’t know what to set those to.
I just set them all to a random string and still got the first error. Do you know what I’m doing wrong or anything else I need to do?

Really sorry to bug you about this. :frowning:

Don’t worry about it @rojo8399, it’s really no problem. Can you paste your entire application.conf file?

It’s just the same as the example but with fakeUser enabled and the discourse api disabled

Ok I just pushed a couple commits to Ore and SpongeAuth’s configs that should fix your issue.

When running sbt publish-local on SpongePlay I get

java.lang.RuntimeException: Setting value cannot be null: {file:/D:/GitHub/SpongePlay/}spongeplay/*:repoPassword at scala.sys.package$.error(package.scala:27) at sbt.EvaluateSettings$INode.setValue(INode.scala:143) at sbt.EvaluateSettings$MixedNode.evaluate0(INode.scala:177) at sbt.EvaluateSettings$INode.evaluate(INode.scala:135) at sbt.EvaluateSettings$$anonfun$sbt$EvaluateSettings$$submitEvaluate$1.apply$mcV$sp(INode.scala:67) at sbt.EvaluateSettings.sbt$EvaluateSettings$$run0(INode.scala:76) at sbt.EvaluateSettings$$anon$3.run(INode.scala:72) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) [error] Setting value cannot be null: {file:/D:/GitHub/SpongePlay/}spongeplay/*:repoPassword [error] Use 'last' for the full log. Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?

When running sbt publish-local on PlayDiscourse it works fine.

After doing both those (knowing SpongePlay didn’t work) and running sbt run on Ore I get

[code]! @72cnbl351 - Internal server error, for (GET) [/] ->

play.api.UnexpectedException: Unexpected exception[SQLTimeoutException: Timeout after 1001ms of waiting for a connection.]
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:180)
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:131)
at scala.Option.map(Option.scala:146)
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:131)
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:129)
at scala.util.Success.flatMap(Try.scala:231)
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:129)
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:121)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
Caused by: java.sql.SQLTimeoutException: Timeout after 1001ms of waiting for a connection.
at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:227)
at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:182)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:93)
at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:12)
at play.api.db.slick.evolutions.internal.DBApiAdapter$DatabaseAdapter.getConnection(DBApiAdapter.scala:57)
at play.api.db.slick.evolutions.internal.DBApiAdapter$DatabaseAdapter.getConnection(DBApiAdapter.scala:60)
at play.api.db.evolutions.DatabaseEvolutions.databaseEvolutions(EvolutionsApi.scala:124)
at play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:102)
at play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:117)
at play.api.db.evolutions.DefaultEvolutionsApi.scripts(EvolutionsApi.scala:82)[/code]

What all do I need to set in the config file to make this testable?

You need to set up a PostgreSQL server and put the connection details in the config.

Also there are a few things mentioned on the readme

Ok thank you! Got that part working, now I’m only getting this error after running (also compiled then ran again)

java.lang.RuntimeException: No main class detected. at scala.sys.package$.error(package.scala:27) [trace] Stack trace suppressed: run last compile:run for the full output. [error] (compile:run) No main class detected. [error] Total time: 0 s, completed Dec 15, 2016 4:35:24 PM

Ok, I got it to start in Activator but when loading the site I get

play.api.UnexpectedException: Unexpected exception[SQLTimeoutException: Timeout after 1001ms of waiting for a connection.] at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:180) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:131) at scala.Option.map(Option.scala:146) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:131) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:129) at scala.util.Success.flatMap(Try.scala:231) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:129) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:121) at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) Caused by: java.sql.SQLTimeoutException: Timeout after 1001ms of waiting for a connection. at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:227) at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:182) at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:93) at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:12) at play.api.db.slick.evolutions.internal.DBApiAdapter$DatabaseAdapter.getConnection(DBApiAdapter.scala:57) at play.api.db.slick.evolutions.internal.DBApiAdapter$DatabaseAdapter.getConnection(DBApiAdapter.scala:60) at play.api.db.evolutions.DatabaseEvolutions.databaseEvolutions(EvolutionsApi.scala:124) at play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:102) at play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:117) at play.api.db.evolutions.DefaultEvolutionsApi.scripts(EvolutionsApi.scala:82) Caused by: java.sql.SQLException: JDBC4 Connection.isValid() method not supported, connection test query must be configured at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:441) at com.zaxxer.hikari.pool.BaseHikariPool$1.run(BaseHikariPool.java:413) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

The database is setup correctly and the info is in the config correctly. I don’t know what’s wrong.

Try adding

connectionTestQuery = "select 1"

in the database connection section

I have a working setup of Ore and have that in my config (don’t remember when/why it’s in the config but maybe that will fix the error)

Thank you! That fixed that issue. Although now I’m getting a null pointer exception.

play.api.UnexpectedException: Unexpected exception[SQLTimeoutException: Timeout after 1002ms of waiting for a connection.] at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:180) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:131) at scala.Option.map(Option.scala:146) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:131) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:129) at scala.util.Success.flatMap(Try.scala:231) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:129) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:121) at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) Caused by: java.sql.SQLTimeoutException: Timeout after 1002ms of waiting for a connection. at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:227) at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:182) at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:93) at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:12) at play.api.db.slick.evolutions.internal.DBApiAdapter$DatabaseAdapter.getConnection(DBApiAdapter.scala:57) at play.api.db.slick.evolutions.internal.DBApiAdapter$DatabaseAdapter.getConnection(DBApiAdapter.scala:60) at play.api.db.evolutions.DatabaseEvolutions.databaseEvolutions(EvolutionsApi.scala:124) at play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:102) at play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:117) at play.api.db.evolutions.DefaultEvolutionsApi.scripts(EvolutionsApi.scala:82) Caused by: java.lang.NullPointerException: null at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:446) at com.zaxxer.hikari.pool.BaseHikariPool$1.run(BaseHikariPool.java:413) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)