Как создать пользовательские команды консоли SBT с Play Scala? [Дубликат]

После болезненных экспериментов, чтобы найти что-то быстрее, чем принятый ответ, я получил это, чтобы работать. Он работал примерно в 100 раз быстрее в наборе данных, на котором я его пробовал.

Если кто-то знает способ сделать это более элегантным, обязательно измените мой код. Я не мог найти способ, который работает без установки других столбцов, которые вы хотите сохранить в качестве индекса, а затем сбросить индекс и переименовать столбцы, но я бы предположил, что есть что-то еще, что работает.

b = DataFrame(a.var1.str.split(',').tolist(), index=a.var2).stack()
b = b.reset_index()[[0, 'var2']] # var1 variable is currently labeled 0
b.columns = ['var1', 'var2'] # renaming var1
8
задан qertoip 12 January 2012 в 11:58
поделиться

3 ответа

[edit] Этот ответ для Play 1. * series!

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

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

В основном вы определяете нужные команды и запускаете их из «выполнить», метод, например:

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/, учитывая, что официальный Play! Документация модуля в этом отношении весьма ограничена

edit

Я думал, что добавлю немного информации:

, прежде чем вы сможете выполните свои команды, вы должны СОЗДАТЬ ваш модуль.

play build-module mymodule

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

3
ответ дан Stefano 27 August 2018 в 18:30
поделиться

Мы используем 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

0
ответ дан Luffy 27 August 2018 в 18:30
поделиться

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

http://www.scala-sbt.org/release/docs/Detailed-Topics / Задачи

В контексте генерируемого воспроизведения 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
  )
}
6
ответ дан ssuperczynski 27 August 2018 в 18:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: