Mojolicious внезапно перестал работать с одной минуты на другую - PullRequest
0 голосов
/ 17 сентября 2018

Несколько дней назад я установил пакет Mojolicious на свой локальный компьютер, потому что мне нужно было реализовать websocket в одной из моих программ Perl на моем производственном сервере. Он установился без проблем, и я смог запустить простой тестовый скрипт:

use strict;
use warnings;

use Mojo::UserAgent;
use Mojo::IOLoop;

# Open WebSocket
my $ua = Mojo::UserAgent->new;

$ua->insecure(1); # Otherwise the handshake will fail

$ua->websocket('wss://some.server.com' => sub {
  my ($ua, $tx) = @_;

  # Check if WebSocket handshake was successful
  unless( $tx->is_websocket ) {
    print "Handshake failed!\n";
    return;
  }

  # Wait for WebSocket to be closed
  $tx->on(finish => sub {
    my ($tx, $code, $reason) = @_;
    print "WebSocket closed with status $code.\n";
  });

  # Close WebSocket after receiving one message
  $tx->on(message => sub {
    my ($tx, $msg) = @_;
    print "WebSocket message: $msg\n";
    $tx->finish;
  });

  # Send a message to the server
  print "Sending...\n";
  $tx->send("Hi there!");

});

# Start event loop if necessary
Mojo::IOLoop->start unless Mojo::IOLoop->is_running;

print "Done!\n";

Я тестировал это на сервере, у которого была небольшая проблема с его сертификатом, поэтому я добавил эту строку:

$ua->insecure(1); # Otherwise the handshake will fail

Когда я, наконец, заработал, добавив эту строку, я установил Mojolicious на свой рабочий сервер, скопировал поверх приведенного выше сценария perl, и он также прекрасно работал там.

Затем я вернулся к своему сценарию на локальном компьютере и запустил его снова. К моему большому удивлению, теперь я получил сообщение об ошибке:

Не удается найти метод объекта "небезопасный" через пакет "Mojo :: UserAgent" в test009.pl, строка 14, строка 2231.

Я переустанавливал Mojolicious несколько раз, но каждый раз, когда запускал скрипт, я получал эту ошибку. Удаление строки просто заставляет скрипт ничего не делать. Он не печатает ни сообщение «Сбой при рукопожатии», ни какое-либо другое сообщение. Даже "Готово!" сообщение.

Похоже, что он просто останавливается сразу после вызова websocket() ...

Сейчас я в растерянности. Я понятия не имею, почему он больше не работает. Ничто не изменилось в моей среде Perl на моей локальной машине ...

Вот еще немного информации о моей локальной машине

  • Windows 7 Pro 64bit SP1
  • ActivePerl 5.16.2
  • Веселый 6,64

Может кто-нибудь предложить несколько советов о том, что произошло? Или желательно, как заставить его работать снова?

1 Ответ

0 голосов
/ 17 сентября 2018

С Насмешливый журнал изменений :

7,80 2018-05-20

  • Многие пользователи ожидали, что Mojo :: UserAgent проверит все сертификаты TLS. по умолчанию. К сожалению, этого пока не произошло, но ситуация изменится с этим выпуском в целях укрепления безопасности. По умолчанию Mojo :: UserAgent теперь будет отклонять все недействительные сертификаты TLS. Вернуться к В предыдущем поведении вы можете использовать новый атрибут insecure.

    $ua->insecure(1);
    

insecure является новым в 7.80. Ваш Mojolicious 6.64 слишком стар.

Вы сказали

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

Либо вы не установили последнюю версию, либо ваш скрипт каким-то образом по-прежнему обнаружил старую версию (проблема с порядком поиска в каталоге?).

Если вы хотите, чтобы ваш код был совместимым (и небезопасным) между старой и новой версиями,

$ua->insecure(1) if $ua->can('insecure');

должно работать.

...