【发布时间】:2014-08-07 10:05:11
【问题描述】:
首先,对不起,我英语不好。
我正在制作一个 Mojolicious 应用程序。
我的控制器使用 Mojo::UserAgent 完成一些工作,并在输出时使用结果。
my $ua = Mojo::UserAgent->new();
my $tx = $ua->head( $location );
my $result;
if ( $tx->res->code eq '200' ) {
$result = 'good';
}
else {
$result = 'bad';
}
# pass the result to the renderer's stash
$self->render( result => $result );
此代码运行良好。 它适用于我的本地机器和服务器。
接下来,我尝试使$ua->head() 成为非阻塞方式,因为它可能需要很长时间才能完成。 (我是新手,这是我第一次尝试使用 Mojo 的非阻塞代码,供大家参考)
my $ua = Mojo::UserAgent->new();
my $result;
$self->render_later;
$ua->head( $location => sub {
my ($ua, $tx) = @_;
if ( $tx->res->code eq '200' ) {
$result = 'good';
}
else {
$result = 'bad';
}
$self->render( result => $result );
});
Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
这种方法也适用于我的本地机器(MacBook OSX 10.9.4、Perl 5.18、Standalone using morbo)。
但是,当我在服务器中启动此代码时,服务器会响应“404 not found”。
此服务器使用 Nginx 代理,将请求转发到工作节点。
browser -- Nginx -- Mojolicious App
所以,我猜这个代理与我的问题有关,但我不知道如何解决它。我什至不知道我必须从哪里开始找到确切的原因。
任何建议将不胜感激。
附:我应该说“阻塞方法”在我的本地机器和服务器上都很好用。只有“非阻塞方法”显示了这个问题。
Update (2014-08-21) : 我的一位精通 Perl 工程师的朋友跟我说,这似乎是 Mojo 的事件循环和 PSGI 的事件循环之间的问题,即类似兼容性的问题问题。我现在听不懂他在说什么,但我正在努力学习更多。
【问题讨论】:
标签: perl nginx mojolicious