Сервер Morbo работает только после постоянного обновления

Я разрабатываю веб-приложение с Mojolicious. Сервер разработки morbo — замечательная вещь, которая отлично работает, но как только я начну возвращать сложные хэши в стек, а затем рендерить веб-страницу, сервер morbo начинает вести себя странно. В моем браузере, если я перейду на одну из тех веб-страниц, которые используют сложный хэш, браузер сообщит мне, что соединение было сброшено. Мне нужно обновить около 10-12 раз, прежде чем страница загрузится.

Например:

В приведенном ниже коде показан один из моих контроллеров приложений. Он просто получает объект json из запроса AJAX, а затем возвращает другой объект json. Он работает нормально, за исключением того, что браузер требует тысячу обновлений, прежде чем он загрузится.

package MyApp::Controller::Library;
use Mojo::Base 'Mojolicious::Controller';

use Mojo::Asset::File;
use MyApp::Model::Generate;
use MyApp::Model::Database;
use MyApp::Model::IpDatabase;
use Mojo::JSON qw(decode_json);

# Receives a json object from an AJAX request and
# sends the necessary information back to be
# displayed in a table.
sub list_ajax_catch {
    my $self = shift;

    my $json  = $self->param('data');
    my $input = decode_json $json;

    $self->render(
        json => {
            "Object A" => {
                "name"        => "Object A's Name",
                "description" => "A Description for Object A",
                "height"      => "10",
                "width"       => "5",
            }
        }
    );
}

1;

Проблема не ограничивается этим экземпляром. Кажется, что каждый раз, когда на сервере много обработки, у браузера возникают проблемы со сбросом. Неважно, какой браузер, я пробовал Chrome, IE, Firefox и другие (на нескольких компьютерах). Неважно, даже если я не отправляю и не получаю данные из html в приложение и обратно. Все, что, кажется, вызывает это, - это если в моем веб-приложении есть какая-то обработка, которая больше, чем просто рендеринг шаблонов, НО, если я запускаю Hypnotoad, все в порядке.

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


person fluke4    schedule 29.10.2014    source источник
comment
Это не похоже на проблему в вашем коде. Проверьте журналы на стороне сервера, если вы найдете там что-то интересное, пожалуйста, обновите вопрос. Может ли это просто привести к некоторым ограничениям памяти (особенно если вы запускаете сервер на VPS)?   -  person afenster    schedule 30.10.2014
comment
Да, я посмотрю, что я могу найти. Есть ли у вас какие-либо рекомендации о том, где я могу найти эти журналы?   -  person fluke4    schedule 30.10.2014
comment
Поведение браузера, которое вы описываете, звучит как цикл перенаправления.   -  person harvey    schedule 31.10.2014
comment
Журналы было легко найти, извините за это. Да, я посмотрел на них, и они не показывают ничего полезного. После неудачи вот что у меня получилось (см. ниже):   -  person fluke4    schedule 31.10.2014
comment
Я попытался просмотреть свои перенаправления, но все, кажется, в порядке. Как я уже сказал, он отлично работает с Hypnotoad, но не с Morbo.   -  person fluke4    schedule 31.10.2014
comment
Спасибо @harvey за помощь. Просто ваше предложение «цикла перенаправления» помогло мне сузить круг поиска и устранения неполадок.   -  person fluke4    schedule 04.11.2014


Ответы (1)


Я понял проблему! Это было проблемой для меня уже более месяца, и я так рад, что она снова работает. Моя проблема заключалась в том, что когда я запускал сервер разработки morbo, я использовал следующую команду:

morbo -w ~/web_dev/my_app script/my_app

Параметр -w позволяет мне отслеживать изменения в каталоге, поэтому мне не нужно перезапускать приложение каждый раз, когда я изменяю некоторые из моих файлов JavaScript. Моя проблема заключалась в том, что каталог, который я просматривал, также содержал мои файлы журналов. Поэтому каждый раз, когда я заходил на свою веб-страницу, журналы менялись, и сервер перезапускался.

person fluke4    schedule 03.11.2014