webentwicklung-frage-antwort-db.com.de

So erkennen Sie den Anwendungsmodus in Play 2.x

Wie würde ich programmgesteuert in einer Play 2.1-Anwendung feststellen, in welchem ​​Modus die Anwendung ausgeführt wird (d. H. Entwicklung vs. Produktion )?

Zum Beispiel wäre es nützlich, so etwas aus einer Vorlage heraus machen zu können:

<p>@if(__some_play_API_call__ == Dev) { <b>Development mode</b> }</p>

In der Play 2.0-API-Dokumentation scheint es eine mode-Eigenschaft der play.api.Application class ... zu geben. Ich bin jedoch nicht sicher, wie ich an die Instanz der aktuell ausgeführten Anwendung komme.

32
kes

Sie können auf die aktuelle Appliction über zugreifen

play.api.Play.current()

um den Modus herauszufinden, versuchen Sie es

play.api.Play.current().mode()

oder einfach verwenden

play.api.Play.isDev(play.api.Play.current())
46
maxmc

In Play 2.5.x ist die play.Play.isDev() -Methode veraltet, man muss Dependency Injection verwenden:

import javax.inject.Inject;

public class Example {

    @Inject
    private play.Environment environment;

    public void myMethod() {
        if (environment.isDev()) {
          ...
        }
    }
}

Oder gleichwertig in Scala:

class ErrorHandler @Inject()(environment: Environment) {

  def myMethod() = {
    if (environment.isDev) {
      ...
    }
  }

}

environment.isDev() gibt einen Boolean zurück, den Sie leicht an eine Vorlage übergeben können. Es ist nicht notwendig, implizite Variablen wie beschrieben zu verwenden: hier .

16
koppor

In Spiel 2.3.X kannst du auch überprüfen über:

play.Play.isProd()
play.Play.isDev()
play.Play.isTest()
10
Gus

Mit Play 2.5 und Play 2.6

Sie können es so machen:

import play.Environment

class MyController @Inject()(env: Environment) {

  println(s"DevMode is ${env.isDev}")
  println(s"ProdMode is ${env.isProd}")
  println(s"TestMode is ${env.isTest}")

}

Oder in Play 2.6 hast du auch die Version mit play.api.Environment:

import play.api.Environment

class MyController @Inject()(env: Environment) {

  println(s"ProdMode is ${env.mode == Mode.Prod}")
  println(s"DevMode is ${env.mode == Mode.Dev}")
  println(s"TestMode is ${env.mode == Mode.Test}")

}
9
pme

In Play 2.5 mit Scala gibt es einen context.environment.mode-Wert von Enumeration aus play.api.Mode mit einem der Werte Dev, Test, Prod.
Für das Injizieren der Kompilierzeitabhängigkeit steht context in Ihrem App Loader zur Verfügung. Wenn Sie BuiltInComponentsFromContext erweitern, können Sie (inject) direkt environment.mode verwenden.

5
icl7126

Fügen Sie in Play 2.6 eine Environment-Instanz ein und verwenden Sie ihr mode-Feld: einen der play.api.Mode enum-Werte.

import javax.inject.Inject
import play.api.Environment
import play.api.Mode.Prod
import play.api.mvc.{AbstractController, ControllerComponents}

class TestController @Inject()(cc: ControllerComponents, env: Environment)
    extends AbstractController(cc) {

  def hello = Action {
    if (env.mode == Prod) {
      // ...
    }

    Ok(s"Hello world in ${env.mode} mode")
  }

}

Zumindest in Play 2.6.20 funktionieren die Methoden env.isDev, env.isProd usw., von pme erwähnt nicht mehr.

0
Jonik