Почему в приложении PlayFramework у меня очень большой тайм-аут?

2

Я создал рабочее приложение, но иногда, когда я меняю вещи и нажимаю кнопку "Перезагрузка" в своем браузере, приложение занимает навсегда время (300000 мс или 5 минут!). После этого я получаю следующее исключение в браузере:

java.util.concurrent.TimeoutException: Futures timed out after [300000 milliseconds]
scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219)
scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223)
scala.concurrent.Await$$anonfun$result$1.apply(package.scala:111)
scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53)
scala.concurrent.Await$.result(package.scala:111)
play.forkrun.ForkRun$$anonfun$askForReload$1.apply(ForkRun.scala:123)
play.forkrun.ForkRun$$anonfun$askForReload$1.apply(ForkRun.scala:121)
play.runsupport.Reloader.reload(Reloader.scala:295)
play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:122)
play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scalscala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1361)
scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

Ошибка в консоли:

[error] application -
[info]
[info] ! Internal server error, for (GET) [/] ->
[info]
[info] java.util.concurrent.TimeoutException: Futures timed out after [300000 milliseconds]
[info]  at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219) ~[scala-library-2.11.1.jar:na]
[info]  at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223) ~[scala-library-2.11.1.jar:na]
[info]  at scala.concurrent.Await$$anonfun$result$1.apply(package.scala:111) ~[scala-library-2.11.1.jar:na]
[info]  at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53) ~[scala-library-2.11.1.jar:na]
[info]  at scala.concurrent.Await$.result(package.scala:111) ~[scala-library-2.11.1.jar:na]

В большинстве случаев я просто останавливаю активатор (CTRL + D в консоли), а затем перезапускаю его с помощью "запуска активатора", приложение работает тогда.

Я пробовал его с активатором 1.3.2 и даже с автономным дистрибутивом на разных компьютерах, но безрезультатно.

Я использую Scala IDE 4.0 (Eclipse).

[EDIT]: Я также пробовал activator ~run, поэтому изменения будут скомпилированы как можно скорее.

Пример для времени ожидания:

(я просто добавил первую строку $document.ready(function() и соответствующие скобки в конце). После того, как я получил таймаут, я остановил активатор, запускаемый CTRL + D, и перезапустил его с помощью activator run. Я не изменил ни одного моего кода! Когда начало было завершено, моя программа функционировала по назначению.

 <script>
        $(document).ready(function() {
            $('#icon').click(function() {
                var $this = $(this);
                $this.css("color","orange");
                var num = $('#num');
                var currentNumber = num.text().length ? parseInt(num.text()) : 0;
                num.text(currentNumber + 1);
            });
        });
    </script>

Я получаю эти таймауты очень часто, например, в 90% моих изменений кода, что очень раздражает.

Итак, как я могу исправить очень длинный тайм-аут?

  • 0
    Скорее всего, Play перекомпилирует некоторые классы, но вам нужно проверить себя, что занимает так много времени, мы не можем догадаться ... также используйте команду ~run она должна быть немного быстрее, так как она пытается скомпилировать небольшие изменения как можно скорее.
  • 0
    Извините, вы правы. Я отредактировал свой пост и добавил пример кода, который сделал приложение тайм-аут. Я пропустил эту информацию, так как у меня время ожидания составляет почти 90% моих изменений ... почти всегда, независимо от того, что я изменяю в своем коде. ~run не помог, я все равно получил тайм-аут.
Теги:
playframework
scala-ide

1 ответ

3
Лучший ответ

Кажется, я нашел ответ сам во время поиска в редакторе в своем первом сообщении. Я пишу это, чтобы он помог кому-то с аналогичной проблемой:

В активаторе 1.3.2 добавлена ​​команда "fork in run" -settting. Таким образом, пользовательский интерфейс активатора добавляет строку fork in run := true к вашему build.sbt в проекте.

Просто удалите, закомментируйте или измените строку на fork in run := false. Это фиксировало мои тайм-ауты.

Стоит упомянуть: компиляция моего проекта теперь намного быстрее, чем раньше.

Я до сих пор не понимаю, почему тайм-ауты случаются, если у кого-то есть более глубокое понимание этого, я бы с удовольствием его услышал. Но на данный момент у меня есть обходное решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню