Tôi đang cố gắng để có được hypnotoad với ứng dụng Mojolicious::Lite chạy trên Heroku với Perloku. Có một cái gì đó không xảy ra khi hypnotoad được vào vòng lặp chạy của nó gây ra nó sụp đổ. Tôi nghĩ rằng tôi đang thiếu một cái gì đó đơn giản, nhưng các tài liệu Heroku đã không giúp đỡ và tôi đã không thể coax thông báo lỗi tốt ra khỏi điều này.Tại sao việc sử dụng hypnotoad của tôi bị rơi trên Heroku?
tôi bắt đầu với một ứng dụng rất đơn giản để hiển thị một số biến môi trường:
#!/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>
Khi tôi chạy này tại địa phương, tôi không có vấn đề. Tôi nhìn thấy từ các biến môi trường mà chương trình của tôi đang chạy theo hypnotoad:
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
Bây giờ, tôi triển khai này với Mojolicious::Command::deploy::heroku:
% toady deploy heroku --create
này đang chạy ở https://frozen-brushlands-4002.herokuapp.com, sử dụng file Perloku mặc định:
#!/bin/sh
./toady daemon --listen http://*:$PORT --mode production
Mặc dù vậy, một số tài liệu tham khảo tôi đã thấy cho biết đó là những gì tôi nên nhận. Ứng dụng này hoạt động, mặc dù:
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
tôi figured Tôi chỉ có thể thay đổi các tập tin Perloku để bắt đầu hypnotoad:
#!/bin/sh
/app/vendor/perl/bin/perl /app/vendor/perl-deps/bin/hypnotoad toady
bắt đầu hypnotoad và gần như ngay lập tức tắt không có thông điệp nhật ký khác:
% 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
Tôi có thể thay đổi lời gọi để sử dụng -t
để kiểm tra ứng dụng để xem liệu:
#!/bin/sh
/app/vendor/perl/bin/perl /app/vendor/perl-deps/bin/hypnotoad -t toady
Hoạt động đó và tôi nhận được "Mọi thứ đều tốt!" tin nhắn, vì vậy hypnotoad đang chạy:
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
Tôi bật ghi nhật ký gỡ lỗi Mojo, nhưng tôi không thấy đầu ra bổ sung ngoài báo cáo của riêng tôi.
#!/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
Tôi đã thử những thứ khác, chẳng hạn như làm cho nó tải mô-đun mà tôi biết không có và tôi nhận được lỗi "Không thể tìm thấy" dự kiến trong nhật ký.
Chạy từ vỏ trong heroku (heroku run bash
) không sáng. Kết quả của mojo version
cũng giống như trên máy tính địa phương của tôi:
$ 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.
tôi tìm có điều gì đó thực sự đơn giản rằng tôi đang mất tích, nhưng cùng một lúc, không ai trong số này là kiến trúc để dễ dàng gỡ lỗi.
Oleg tiến gần hơn một chút, nhưng vẫn còn vấn đề. Tôi đã thử tùy chọn nền trước và chạy vào cùng một vấn đề nhưng không đề cập đến nó.
Nếu tôi bắt đầu hypnotoad ở nền trước, nó sẽ cố gắng liên kết với một địa chỉ. Nó không thể liên kết với cổng 80 (hoặc 443) và đụng độ, và nó có thể nghe 127.0.0.1: hầu hết, nhưng có vẻ như nó không hoàn toàn lắng nghe:
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
Dưới đây là với một cổng không có đặc quyền:
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
Đầu ra của lệnh "phiên bản mojo" là gì? –
Đó là bất cứ điều gì tôi quyết định cài đặt. Tôi đang sử dụng 5.71. –
Phần thú vị của đầu ra 'phiên bản mojo' là những mô-đun tùy chọn được cài đặt –