我把这个放在我的app/scripts文件夹上(我在app/中创建了这个文件夹)。我不知道如何在这里正确地设置类路径,因此我甚至没有运行它来知道它是否会真正连接到数据库。如何在命令行中以干净的方式运行?
package scripts
import scala.collection.TraversableOnce
import scala.collection.generic.SeqForwarder
import scala.io.Source
import scala.slick.jdbc.{StaticQuery => Q}
import scala.slick.session.Session
import scala.slick.session.Database
import play.api.db.DB
import tables.Campeonatos
import tables.Jogos
import org.postgresql.Driver
import play.api.test._
import play.api.test.Helpers._
// ...
class InsertJogosCSV extends App {
val dao = new DAO()
val application = FakeApplication()
def insertJogos(csv: CSV)(implicit s: Session) = {
val times = dao.getTimeIdByNameMap
var count = 0
csv foreach { case cols =>
count += 1
dao.insertJogo(cols, times)
}
count
}
val csvFilePath: String = args(0)
val csv = new CSV(csvFilePath)
csv.printLines
running(application) {
val realDatabase = Database.forDataSource(DB.getDataSource()(application))
implicit val s = realDatabase.createSession
insertJogos(csv)
}
}发布于 2014-05-10 17:59:20
您可以通过在应用程序根目录下使用play test:console命令来实现这一点。首先,您可能会将代码移动到主方法中,而不是扩展App。
class InsertJogosCSV {
def main(args: Array[String]) {
val dao = new DAO()
val application = FakeApplication()
def insertJogos(csv: CSV)(implicit s: Session) = {....}
....
}
}然后运行play test:console命令并执行以下操作
scala> import scripts.InsertJogosCSV
import scripts.InsertJogosCSV
scala> val insert = new InsertJogosCSV()
insert: scripts.InsertJogosCSV = scripts.InsertJogosCSV@7d5f9d2b
scala> insert.main
res0: .....默认情况下,play test:console会添加从app文件夹到类路径的所有内容,以及脚本所需的FakeApplication上下文。希望这能有所帮助。
https://stackoverflow.com/questions/23583244
复制相似问题