Как определить произвольные задачи в Play Framework?(как рубиновые грабли) - PullRequest
8 голосов
/ 12 января 2012

Как определить произвольные задачи в Play Framework?

Я имею в виду задачи, запускаемые из командной строки, что-то похожее на ruby ​​rake.

Я знаю инструмент ant, но смотрюдля лучшей альтернативы.

Ответы [ 3 ]

7 голосов
/ 01 мая 2013

Для Play 2 вы можете создавать новые задачи, используя SBT, следуя документации, приведенной здесь:

http://www.scala -sbt.org / release / docs / Detail-Topics / Tasks

В контексте Play 2, сгенерированного Build.scala, это может выглядеть так:

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build { 

  val appName         = "foo"
  val appVersion      = "1.0-SNAPSHOT"

  val appDependencies = Seq(
    // Add your project dependencies here,
    jdbc,
    anorm
  )

  val hello = TaskKey[Unit]("hello", "Prints 'Hello World'")

  val helloTask = hello := {
    println("Hello World")
  }

  lazy val main = play.Project(appName, appVersion, appDependencies).settings(
    helloTask
  )
}
3 голосов
/ 12 января 2012

[править] Этот ответ предназначен для серии Play 1. *!

Вам следует написать собственный модуль, затем ваши команды перейдут в commands.py file, ref: http://www.playframework.org/documentation/1.2.4/releasenotes-1.1#commands

Вы можете взглянуть на существующие модули, чтобы получить вдохновение, например: https://github.com/sim51/logisima-play-yml/blob/master/commands.py

По сути, вы определяете нужные команды и запускаете их из "execute"метод, например:

COMMANDS = ['namespace:command']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "namespace:command":
        do_something()

, если вы хотите запустить что-то Java - часто дело!-:

def do_something():
    java_cmd = app.java_cmd([], None, "play.modules.mymodule.MyClass", args)
        try:
            subprocess.call(java_cmd, env=os.environ)
        except OSError:
            print "Could not execute the java executable, please make sure the JAVA_HOME environment variable is set properly (the java executable should reside at JAVA_HOME/bin/java). "
            sys.exit(-1)
        print

Ps.

Создание пользовательского модуля так же просто, как:

play new-module mymodule

Это учебник для начинающих: http://playframework.wordpress.com/2011/02/27/play-modules/, учитываяэтот официальный играть!документация к модулю весьма ограничена в этом отношении

edit

Я подумал, что добавлю небольшой кусочек информации:

, прежде чемв состоянии выполнять ваши команды, вы должны построить свой модуль.Он не запускается как остальная часть игры с динамической компиляцией.

play build-module mymodule

new-module / build-module ожидают, что модуль находится в корне папки проекта, но если у вас их много, это становитсябардак.build-module module-srcs/mymodule отлично работает.

0 голосов
/ 12 января 2012

Мы используем Play Jobs для таких задач.

@Every("1h")
public class WelcomeUser extends Job {

public void doJob() {
    List<User> newUsers = User.find("newAccount = true").fetch();
    for(User user : newUsers) {
        Notifier.sayWelcome(user);
    }
}

} 

или

Начальная загрузка для таких задач, как db_migration:

@OnApplicationStart
public class Bootstrap extends Job {

public void doJob() {
    if(Page.count() == 0) {
        new Page("root").save();
        Logger.info("The page tree was empty. A root page has been created.");
    }
}

}

Посмотрите игровые документы: http://www.playframework.org/documentation/1.2.4/jobs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...