2017-10-20 31 views
1

J'ai un problème avec la mise en cache du navigateur, donc j'ai décidé de changerScala Jouer `@ routes.Assets.versioned` provoquant une erreur non descriptive

<script type="text/javascript" src="@routes.Assets.at("/accounts/dist/inline.bundle.js")"></script> 

à

<script type="text/javascript" src="@routes.Assets.versioned("/public/accounts/dist","inline.bundle.js")"></script> 

que nous faisons déjà dans d'autres projets, mais je reçois cette erreur totalement inutile:

C:\work\FrontServices\Spike2>sbt -jvm-debug 9999 run 
"C:\Users\xavier\.sbt\preloaded\org.scala-sbt\sbt\"1.0.2"\jars\sbt.jar" 
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0 
Listening for transport dt_socket at address: 58387 
[warn] Executing in batch mode. 
[warn] For better performance, hit [ENTER] to switch to interactive mode, or 
[warn] consider launching sbt without any commands, or explicitly passing 'shell' 
[info] Loading project definition from C:\Users\xavier\.sbt\0.13\staging\560eb781744c869bfbb7\sbt-coveralls\project 
[info] Loading project definition from C:\work\FrontServices\Spike2\project 
[info] Set current project to Spike2 (in build file:/C:/work/FrontServices/Spike2/) 
[info] Compiling 1 Scala source to C:\work\FrontServices\Spike2\modules\accounts\target\scala-2.11\classes... 
[error] C:\work\FrontServices\Spike2\modules\accounts\app\com\newswhip\accounts\views\accounts.scala.html:20: too many arguments for method versioned: (file: controllers.Assets.Asset)play.api.mvc.Call 
[error]  <script type="text/javascript" src="@routes.Assets.versioned("/public/accounts/dist","inline.bundle.js")"></script> 
[error]                     ^
[error] C:\work\FrontServices\Spike2\modules\accounts\app\com\newswhip\accounts\views\accounts.scala.html:21: too many arguments for method versioned: (file: controllers.Assets.Asset)play.api.mvc.Call 
[error]  <script type="text/javascript" src="@routes.Assets.versioned("/public/accounts/dist","polyfills.bundle.js")"></script> 
[error]                     ^
[error] C:\work\FrontServices\Spike2\modules\accounts\app\com\newswhip\accounts\views\accounts.scala.html:22: too many arguments for method versioned: (file: controllers.Assets.Asset)play.api.mvc.Call 
[error]  <script type="text/javascript" src="@routes.Assets.versioned("/public/accounts/dist","styles.bundle.js")"></script> 
[error]                     ^
[error] C:\work\FrontServices\Spike2\modules\accounts\app\com\newswhip\accounts\views\accounts.scala.html:23: too many arguments for method versioned: (file: controllers.Assets.Asset)play.api.mvc.Call 
[error]  <script type="text/javascript" src="@routes.Assets.versioned("/public/accounts/dist","vendor.bundle.js")"></script> 
[error]                      ^
[error] C:\work\FrontServices\Spike2\modules\accounts\app\com\newswhip\accounts\views\accounts.scala.html:24: too many arguments for method versioned: (file: controllers.Assets.Asset)play.api.mvc.Call 
[error]  <script type="text/javascript" src="@routes.Assets.versioned("/public/accounts/dist","main.bundle.js")"></script> 
[error]                      ^
[error] 5 errors found 
[error] (accounts/compile:compileIncremental) Compilation failed 
[error] Total time: 4 s, completed 20-Oct-2017 10:27:09 

C:\work\FrontServices\Spike2> 

C'est le fragment de code du routes fichier

# Map static resources from the /public folder to the /assets URL path 
GET  /assets/*file    controllers.Assets.versioned(path = "/public/accounts/dist", file: Asset) 

# Map static resources from the /public folder to the /assets URL path 
GET  /assets/*file    controllers.Assets.at(path = "/public", file) 

Des idées?

Répondre

0

Dans src="@routes.Assets.versioned("/public/accounts/dist","inline.bundle.js")" pourquoi vous séparez les deux chaînes avec la virgule à l'intérieur versioned().

Cela signifie que vous donnez versioned() deux paramètres en raison de laquelle il jette une erreur, car il attend qu'un seul.

Au lieu de cela, vous devriez faire comme ça -

src="@routes.Assets.versioned("/public/accounts/dist/inline.bundle.js")" 

est à inline.bundle.js en supposant le chemin /public/accounts/dist/

Essayez ceci et laissez-moi savoir si cela fonctionne. J'espère que ça le fait!

+0

Je passe 2 paramètres int versionnées, parce que nous faisons déjà avec succès dans les 2 autres projets. Outre le fichier routes a cette ligne dans 'GET/assets/fichier * controllers.Assets.versioned (path = "/ public/comptes/dist", fichier: Asset)' si versionné peut prendre 2 params. Je l'ai déjà essayé la fusion de la chaîne 1 en param comme il est utilisé avec '' - juste remplacé 'at' par' versioned' mais j'obtiens l'erreur "noSuchMethod + controllers.ReverseAssets.versioned" lors de la compilation. – codeepic

+0

L'erreur exacte est 'erreur non capturé fil [application akka.actor.default-répartiteur-6] arrêt machine virtuelle Java depuis 'akka.jvm-sortie-sur-erreur fatale' est activée pour ActorSystem [l'application] java. lang.NoSuchMethodError: controllers.ReverseAssets.versioned (Lcontrollers/actifs $ d'actifs;) Lplay/api/mvc/appel, ' – codeepic

+0

Ok, essayez de supprimer le chemin que vous avez déjà donné des routes à l'intérieur du versionné.Ce que je veux dire est, dans les routes que vous avez spécifié le chemin comme '/ public/accounts/dist', alors supprimez cette partie lorsque vous accédez à ceci dans votre code. Essayez d'utiliser - 'src =" @ routes.Assets.versioned ("inline.bundle.js") "'. J'espère que ca fonctionne! –

0

Dans votre définition routes vous êtes en train de faire:

GET  /assets/*file controllers.Assets.versioned(path = "/public/accounts/dist", file: Asset) 

Cela signifie que le premier paramètre pour la méthode Assets.versioned est déjà défini (path = "/public/accounts/dist"). Donc, vous avez de la place pour un paramètre de plus seulement (le fichier d'actifs). Mais votre point de vue que vous avez:

<script type="text/javascript" src="@routes.Assets.versioned("/public/accounts/dist","inline.bundle.js")"></script> 

En d'autres termes, vous essayez de définir le chemin à nouveau, mais c'est le routeur inverse maintenant (@routes.Assets) et non le « original » généré Assets.versioned, vous obtenez alors la Erreur.

La solution est de changer le code pour ne laisser passer que le paramètre file:

<script type="text/javascript" src="@routes.Assets.versioned("inline.bundle.js")"></script>