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.
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())
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 .
In Spiel 2.3.X kannst du auch überprüfen über:
play.Play.isProd()
play.Play.isDev()
play.Play.isTest()
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}")
}
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.
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.