请耐心等待,因为除了我继承了用它写的东西之外,我真的不知道关于Dancer2的第一件事.
我想附加一个常规调试器,它正在抵制我的大部分尝试.
说我有:
package Wharrgarbl;
use Dancer2;
# lots of stuff
get '/wharrgarbl/:potato' => sub {
use DB; $DB::single = 1;
# probably too much code here
}
Run Code Online (Sandbox Code Playgroud)
我希望能够将调试器附加到该响应处理程序.我该如何完成这个咒语?
perl -d -I wharrgarbl/lib -MWharrgarbl -E 'Wharrgarbl->???("/wharrgarbl/fnorb")'
Run Code Online (Sandbox Code Playgroud) 我正在和Dancer一起写一个非常小的URL缩短器.它使用REST插件将发布的URL存储在数据库中,该数据库具有六个字符的字符串,用户可以使用该字符串来访问短路的URL.
现在我对我的随机字符串生成方法有点不确定.
sub generate_random_string{
my $length_of_randomstring = shift; # the length of
# the random string to generate
my @chars=('a'..'z','A'..'Z','0'..'9','_');
my $random_string;
for(1..$length_of_randomstring){
# rand @chars will generate a random
# number between 0 and scalar @chars
$random_string.=$chars[rand @chars];
}
# Start over if the string is already in the Database
generate_random_string(6) if database->quick_select('urls', { shortcut => $random_string });
return $random_string;
}
Run Code Online (Sandbox Code Playgroud)
这会生成一个六字符串,如果生成的字符串已经在数据库中,则会递归调用该函数.我知道有63 ^ 6个可能的字符串,但如果数据库收集更多条目,这将需要一些时间.也许它会变成一个几乎无限的递归,我想阻止它.
有没有办法生成独特的随机字符串,以防止递归?
提前致谢
当请求到达我的dancer2应用程序时,我想设置一个对象,该对象可以被处理此请求所涉及的所有包访问.
如何确保此对象仅在此单个请求中具有范围,并且其他请求无法访问该对象?
具体来说,当执行通过我的库时,此对象应填充各种消息(错误,警告,调试消息等).
显然,这些消息是特定于请求的,我担心天真地声明对此消息对象的全局引用会将其暴露给所有命中应用程序的请求.
我正在考虑在路由器中创建此消息类的实例,然后在处理此请求所涉及的所有方法中传递对它的引用.
我的直觉告诉我,我在这里基本上缺少一些关于dancer2的建筑方面的东西,所以我决定问你.顺便说一下,这是我的第一篇文章,所以我为我的问题可能存在的任何缺点道歉.
我的程序:
#!/usr/bin/perl
use strict;
use warnings;
use Dancer2;
$| = 1;
set host => '127.0.0.1';
set port => 7071;
get '/foo' => sub {
`sleep 5`;
'ok'
};
start;
Run Code Online (Sandbox Code Playgroud)
然后我运行以下for循环:
for i in $(seq 1 3)
> do
> time curl http://localhost:7071/foo &
> done
Run Code Online (Sandbox Code Playgroud)
输出:
ok
real 0m5.032s
user 0m0.013s
sys 0m0.000s
ok
real 0m10.037s
user 0m0.012s
sys 0m0.000s
ok
real 0m15.043s
user 0m0.004s
sys 0m0.008s
Run Code Online (Sandbox Code Playgroud)
看来Dancer2一次只能接受一个请求,如何允许多个连接到Dancer2?
我想在我的网站上使用舞者和明星.我成功地将错误日志设置到文件中.当然我可以运行脚本来每天移动错误日志.但我只是想知道是退出方法还是cpan模块来解决问题.谢谢〜
使用Perl的Dancer模块,如果你有一个"any"方法(匹配get/post/put/delete),你怎么能确定浏览器使用哪种实际方法?
#!/usr/bin/perl
use Dancer;
my $instance = someclass->new();
any('/' => sub{
my $method = ???
my $params = params();
return($instance->$method($params));
});
Run Code Online (Sandbox Code Playgroud) 我正在使用Perl Dancer和Template::Toolkit.
我正在尝试创建一个通用例程,该例程将传递模板和HTTP GET/POST参数.
我需要找到一种方法来获取模板中的变量列表,因此我可以从参数中检索它们,或者如果缺少一个或多个,则返回错误.
我可以走一条丑陋的正则路线,但我希望有更好/更清洁的方式.
所有模板都是XML/SOAP,其中包含一些变量.
有任何想法吗?
我正在尝试使用Perl Dancer Web框架提供robots.txt.我认为有一条刚刚返回文本的路径会起作用,但它似乎将它包装在其中html并body标记.我假设这不会被爬虫正确解释为robots.txt文件.
知道如何正确地做到这一点?
以下是我编写路线的方法:
get '/robots.txt' => sub {
return "User-agent: *\nDisallow: /";
};
提前致谢!
当与Starman一起运行时,我无法找到在Dancer应用程序中使用包变量(或任何类型)的方法.我想它与Starman的preforking有某种关系,但这应该是一个特征,而不是一个bug.
这是舞者应用程序的示例:
package nafig;
use Dancer;
my $a = 0;
$b = 0;
$nafig::c = 0;
any '/' => sub {
warn join " ", $a++, $b++, $nafig::c++;
};
start;
Run Code Online (Sandbox Code Playgroud)
然后我连续3次调用该应用程序.首先,我用plack引用服务器运行它,一切都按预期工作:
$ plackup app.pl
HTTP::Server::PSGI: Accepting connections at http://0:5000/
0 0 0 at ... blah-blah-blah
1 1 1 at ... blah-blah-blah
2 2 2 at ... blah-blah-blah
Run Code Online (Sandbox Code Playgroud)
但是当我和Starman做同样的事情时,我得到了以下内容.
$ plackup -s Starman app.pl
2013/11/17-23:33:35 Starman::Server (type Net::Server::PreFork) starting! pid(527)
Resolved [*]:5000 to [::]:5000, IPv6
Not including resolved host [0.0.0.0] IPv4 …Run Code Online (Sandbox Code Playgroud) 我正在使用 Perl Dancer 开发一个处理最少路由和请求的应用程序。
Perl Dancer(微型网络框架)和 Node.js 有什么区别?Node.js 和 Perl Dancer 哪个更好?