Ich versuche, Hypnotoad mit einer Mojolicious::Lite App unter Heroku mit Perloku zu bekommen. Es gibt etwas, das nicht passiert, wenn hypnotoad in seine Ausführungsschleife gerät, die es zum Absturz bringt. Ich denke, ich vermisse etwas Einfaches, aber die Heroku-Dokumente haben mir nicht geholfen, und ich konnte keine guten Fehlermeldungen daraus machen.Warum stürzt Hypnotoad auf Heroku?
ich mit einer sehr einfachen Anwendung starten, damit einige Umgebungsvariablen zeigen:
#!/usr/bin/env perl
# today
use Mojolicious::Lite;
get '/' => sub {
my $c = shift;
my $content = "Perl: $^X Pid: $$\n\n";
foreach my $key (keys %ENV) {
next unless $key =~ /Mojo|toad/i;
$content .= "$key $ENV{$key}\n";
}
$c->stash(content => $content);
$c->render('index');
};
app->start;
__DATA__
@@ index.html.ep
% layout 'default';
% title 'Welcome';
<p>Welcome to the Mojolicious real-time web framework!</p>
<pre>
<%= $content %>
</pre>
@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
<head><title><%= title %></title></head>
<body><%= content %></body>
</html>
Als ich das lokal ausgeführt, ich kein Problem haben. Ich sehe von den Umgebungsvariablen, die mein Programm unter hypnotoad ausgeführt wird:
Welcome to the Mojolicious real-time web framework!
Perl: /Users/brian/Dropbox/bin/perls/perl5.20.0 Pid: 40006
HYPNOTOAD_PID 39981
MOJO_HELP
HYPNOTOAD_TEST
HYPNOTOAD_EXE /Users/brian/bin/perls/hypnotoad5.20.0
MOJO_REUSE 0.0.0.0:8080:6
HYPNOTOAD_REV 3
HYPNOTOAD_APP /Users/brian/Desktop/toady.d/toady
MOJO_MODE production
MOJO_HOME
HYPNOTOAD_STOP
HYPNOTOAD_FOREGROUND
Nun, ich implementieren diese mit Mojolicious::Command::deploy::heroku:
% toady deploy heroku --create
Dies wird bei https://frozen-brushlands-4002.herokuapp.com ausgeführt wird, unter Verwendung der Standard Perloku Datei:
Dies ist nicht ausgeführt Hypnotoad obwohl trotz einiger Referenzen, die ich gesehen habe, das ist, was ich bekommen sollte. Die Anwendung funktioniert, aber:
Welcome to the Mojolicious real-time web framework!
Perl: /app/vendor/perl/bin/perl Pid: 3
MOJO_REUSE 0.0.0.0:12270:4
MOJO_HOME
MOJO_HELP
MOJO_MODE production
MOJO_EXE ./toady
ich dachte, ich könnte nur die Perloku Datei ändern hypnotoad zu starten:
#!/bin/sh
/app/vendor/perl/bin/perl /app/vendor/perl-deps/bin/hypnotoad toady
hypnotoad beginnt und fast schaltet sofort ohne weitere Protokollmeldungen nach unten:
% heroku logs --app ...
2015-01-04T09:23:36.516864+00:00 heroku[web.1]: Starting process with command `./Perloku`
2015-01-04T09:23:38.321628+00:00 heroku[web.1]: State changed from starting to crashed
Ich kann den Aufruf ändern, um die -t
verwenden, um die App zu testen, um zu sehen, ob:
#!/bin/sh
/app/vendor/perl/bin/perl /app/vendor/perl-deps/bin/hypnotoad -t toady
Das funktioniert und ich bekomme das "Alles sieht gut aus!" Nachricht, so hypnotoad ausgeführt wird:
2015-01-04T09:36:36.955680+00:00 heroku[web.1]: Starting process with command `./Perloku`
2015-01-04T09:36:38.340717+00:00 app[web.1]: Everything looks good!
2015-01-04T09:36:39.085887+00:00 heroku[web.1]: State changed from starting to crashed
Ich schalte die Debug-Protokollierung Mojo, aber ich sehe nicht, zusätzliche Ausgabe andere als meine eigenen Aussagen.
#!/usr/bin/env perl
use Mojolicious::Lite;
$|++;
my $log = app->log;
$log->level('debug');
$log->debug("INC: @INC");
get '/' => sub {
...;
};
$log->debug("Right before start");
my $app = app->start;
$log->debug("Right after start");
$app; # must return application object
Ich habe versucht, andere Dinge, wie so dass es ein Modul laden Ich weiß nicht da ist und ich erhalte die erwarteten Fehler in den Protokollen „kann nicht gefunden werden“.
Das Laufen von der Schale in heroku (heroku run bash
) war nicht erhellend. Der Ausgang des mojo version
ist die gleiche wie auf meinem lokalen Rechner:
$ perl vendor/perl-deps/bin/mojo version
CORE
Perl (v5.16.2, linux)
Mojolicious (5.71, Tiger Face)
OPTIONAL
EV 4.0+ (n/a)
IO::Socket::Socks 0.64+ (n/a)
IO::Socket::SSL 1.84+ (n/a)
Net::DNS::Native 0.15+ (n/a)
You might want to update your Mojolicious to 5.72.
ich meine, es ist etwas wirklich einfach, dass ich fehle, aber zur gleichen Zeit, nichts davon ist für eine einfache Debugging architected.
Oleg kommt ein wenig näher, aber es gibt immer noch Probleme. Ich hatte die Vordergrundoption schon einmal ausprobiert und stieß auf die gleichen Probleme, habe sie aber nicht erwähnt.
Wenn ich Hypnotoad im Vordergrund starte, versucht es an eine Adresse zu binden. Es kann nicht binden an Port 80 (oder 443) und stürzt ab, und es kann auf 127.0.0.1 hören: fast, aber es sieht aus wie es vollständig hören nicht auf:
2015-01-13T11:47:54+00:00 heroku[slug-compiler]: Slug compilation started
2015-01-13T11:48:32+00:00 heroku[slug-compiler]: Slug compilation finished
2015-01-13T11:48:32.735095+00:
00 heroku[api]: Deploy dcab778 by ...
2015-01-13T11:48:32.735095+00:00 heroku[api]: Release v31 created by ...
2015-01-13T11:48:32.969489+00:00 heroku[web.1]: State changed from crashed to starting
2015-01-13T11:48:34.909134+00:00 heroku[web.1]: Starting process with command `./Perloku`
2015-01-13T11:48:36.045985+00:00 app[web.1]: Can't create listen socket: Permission denied at /app/vendor/perl-deps/lib/perl5/Mojo/IOLoop.pm line 120.
2015-01-13T11:48:36.920004+00:00 heroku[web.1]: Process exited with status 13
2015-01-13T11:48:36.932014+00:00 heroku[web.1]: State changed from starting to crashed
Hier ist mit einem unprivilegierten Port:
2015-01-13T11:39:10+00:00 heroku[slug-compiler]: Slug compilation started
2015-01-13T11:39:44+00:00 heroku[slug-compiler]: Slug compilation finished
2015-01-13T11:39:44.519679+00:00 heroku[api]: Deploy bbd1f68 by ...
2015-01-13T11:39:44.519679+00:00 heroku[api]: Release v29 created by ...
2015-01-13T11:39:44.811111+00:00 heroku[web.1]: State changed from crashed to starting
2015-01-13T11:39:47.382298+00:00 heroku[web.1]: Starting process with command `./Perloku`
2015-01-13T11:39:48.454706+00:00 app[web.1]: [Tue Jan 13 11:39:48 2015] [info] Listening at "http://*:8000".
2015-01-13T11:39:48.454733+00:00 app[web.1]: Server available at http://127.0.0.1:8000.
2015-01-13T11:39:48.454803+00:00 app[web.1]: [Tue Jan 13 11:39:48 2015] [info] Manager 3 started.
2015-01-13T11:39:48.480084+00:00 app[web.1]: [Tue Jan 13 11:39:48 2015] [info] Creating process id file "/app/hypnotoad.pid".
2015-01-13T11:40:47.703110+00:00 heroku[web.1]: Stopping process with SIGKILL
2015-01-13T11:40:47.702867+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2015-01-13T11:40:48.524470+00:00 heroku[web.1]: Process exited with status 137
2015-01-13T11:40:48.534002+00:00 heroku[web.1]: State changed from starting to crashed
Was ist die Ausgabe von "mojo version" -Befehl? –
Es ist alles, was ich installieren möchte. Ich benutze 5.71. –
Der interessante Teil der 'mojo version'-Ausgabe ist, welche optionalen Module installiert sind –