我已经做了一段时间的网络编程,并且对LAMP堆栈非常熟悉.我决定尝试玩弄nginx的/接龙/舞者堆栈和我有点困惑如何理解,从一个高层次,所有的部分是如何相互关联的.设置堆栈似乎并不像设置LAMP堆栈那样简单,但这可能是因为我并不真正了解这些部分是如何相关的.
我理解nginx正在扮演的角色 - 一个轻量级的网络服务器/代理 - 但我对starman与pgsi,plack和舞者的关系感到困惑.
我将非常感谢这些部分如何相互关联以及为什么每个部分都需要(或不必要)来获得堆栈设置的高级细分.谢谢!
你怎么看待这两个?我开始读一本关于Catalyst的书,发现它与Dancer相比非常复杂.所以现在我正在试试舞者,它看起来更容易学习,更"人性化".
我希望能够为我的Perl程序创建Web前端.我对Perl有很多经验,并且我将大部分代码转换为由Chromatic支持的Modern Perl范例.我有写网页的ZERO经验.(偶尔会出现Word保存为网页).
我相信我知道开始使用哪些工具,我只是难以使用他们的开始文档以及学习工具的顺序.
Perl:我都在这里.
舞者:我创建了一个网站,但我很丢失,而cpan文档让我更加困惑.我不知道如何将这些网站与Apache集成,而不是使用Dancer附带的迷你服务器.
模板工具包:这个看起来最直接,我有O'Reilly的书.对于看似简单的东西来说,这似乎是一本非常大的书,所以我知道我错过了一些东西.
HTML:我应该学到多少钱?什么是最好的学习路径?
最终,最好的是"使用Perl从头开始构建现代网站"教程,书籍,视频系列或网站.
请问,从哪里开始?
我使用以下方式启动了Dancer/Starman服务器:
sudo plackup -s Starman -p 5001 -E deployment --workers=10 -a mywebapp/bin/app.pl
但我不确定如何停止服务器.有人能给我一个快速的方法来阻止它以及它产生的所有工人吗?
假设我有一个独立的Dancer webapp.我可以通过运行make dist,获取tarball然后通过cpanm或类似方法安装它来将其部署到主机.但是,我似乎无法找到如何控制此部署.当我在应用程序上创建dist时,然后在其他地方安装应用程序,它似乎只是安装应用程序的模块.但是,应用程序脚本,各种html文件和模板,环境配置文件未安装到本地文件系统.
什么是从系统上的webapp开始的正确方法 - > tarball - >系统b上的webapp?
编辑:
对不起,我应该澄清,我明白我可以手动完成所有事情.我很惊讶没有快速方法可以使用几个命令进行安装,或者在应用程序本身中指定感觉各种组件可以安装的地方.
因为我在大多数情况下使用cpanm,这简化了系统B上的操作,因为我可以将其提取到目录,更改为它,运行'cpanm'.它将依赖项和应用程序的模块安装到系统lib中.
但是,这会导致应用程序模块位于<>/lib /以及系统perllib安装路径中.这也意味着用户需要了解一下perl.
我想我只是想知道事情是否发生了变化,因为什么是安装Perl网络应用程序的最佳系统?有人在三年前被问过.随着现代Perl技术发展的所有进步,似乎这就是现在已经处理过的那类问题.
我不确定以正确的方式为www mechanize设置脚本应用程序.我确实尝试过至少一个可行的备用,但是我试图通过测试传递配置,这样我就可以使测试套件更安静.
#!/usr/bin/perl
use strict;
use warnings;
use Dancer qw(:syntax);
use MyApp;
use Test::More;
use Test::WWW::Mechanize::PSGI;
set apphandler => 'PSGI';
set log => 'warning';
set logger => 'note';
my $mech = Test::WWW::Mechanize::PSGI->new(
app => dance, # app => do('bin/app.pl'), #
);
$mech->get_ok('/login') or diag $mech->content;
done_testing;
Run Code Online (Sandbox Code Playgroud)
do在脚本上运行似乎允许测试运行,但是日志变量没有正确设置,同时似乎有更好的方法来做到这一点.
更新
我想我可能会越来越接近一个解决方案......
#!/usr/bin/perl
use strict;
use warnings;
use FindBin;
use Cwd qw( realpath );
use Dancer qw(:syntax);
use MyApp;
use Test::More;
use Test::WWW::Mechanize::PSGI;
set apphandler => 'PSGI';
my $appdir = realpath( "$FindBin::Bin/.." …Run Code Online (Sandbox Code Playgroud) 通常情况下,当你使用舞者时,你可以打电话
debug 'foo';
Run Code Online (Sandbox Code Playgroud)
它会记录文本.但我希望能够在不导入舞者语法的对象中记录内容.我想知道是否有办法让舞者只是把它的日志对象(我假设有一个)交给我,这样我就可以使用对象语法调用类似调试的东西,例如
$logger->debug( 'foo' );
Run Code Online (Sandbox Code Playgroud) 我正在使用Perl dancer2来编写应用程序.在mysql中运行select查询显示所有记录.但是在dancer2和template工具包中运行的相同查询仅显示唯一记录.
例如.在mysql客户端中运行时获取的34条记录.
select timing.time as Time,
church.church_name as Church_Name,
church.church_address as Address,
language.language_name as Language,
denomination.denomination_name as Denomination,
city.city_name as City,
state.state_name as State,
country.country_name as Country
from church
join country on church.church_countryid=country_id
join state on church.church_stateid=state.state_id
join city on church.church_cityid=city.city_id
join church_mass_timing on church.church_id=church_mass_timing.church_id
join timing on church_mass_timing.time_id=timing.time_id
join language on church_mass_timing.language_id=language.language_id
join denomination on church.church_denominationid=denomination.denomination_id
order by church.church_name,
timing.time;
Run Code Online (Sandbox Code Playgroud)
Dancer中与Template Toolkit相同的查询返回11条记录.
get '/church_list' => sub {
my $db = connect_db();
my $sql='select timing.time as Time,
church.church_name as …Run Code Online (Sandbox Code Playgroud) 我计划用PSGI/Plack开发一个Web应用程序.(与舞者有关,但尚未决定).
应用程序应该是utf8,多语言(使用Locale :: Maketext)和(ofc)将包含给定语言的一些静态页面.我的想法是将它部署在不同的语言域中en.example.com,de.example.com等等.应用程序本身很简单,大多数只会填充带有本地化文本和其他(轻量级)功能的模板.
在一台物理计算机中为多个基于语言的子域部署一个应用程序的最佳解决方案是什么?
我目前的研究以此解决方案结束:需要为每个语言子域使用Apache及其基于名称的虚拟服务器.
<VirtualHost en.example.com>
ServerName en.example.com
DocumentRoot /path/to/site/en/files
<Location />
SetHandler perl-script
PerlResponseHandler Plack::Handler::Apache2
PerlSetVar psgi_app /path/to/site/en/en.psgi
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
问题:
什么其他的想法/事物会对开发本身产生什么影响?
我希望能够在舞者应用程序中输入"make test"来解决源目录(由"舞者-a appname"生成的目录)并让它在环境设置为'test'的情况下运行测试.
或者,如果有人可以指向我的存储库,我可以称之为"开发舞者应用程序的最佳实践",这将是伟大的!