如何使用cgi和调用外部脚本来部署perl dancer应用程序



我有一个使用CGI实现的Web应用程序。它基本上使用system()调用来启动其他程序,结果将以html呈现。

现在,我正在尝试使用Dancer来实现它。为了运行这些外部程序,我在/MyApp中创建了一个"scripts"目录,所以它就像/MyApp/scripts。我把所有其他脚本都放在那里,这些脚本将在路由处理程序中调用。

get '/analysis' => sub {
if (session('user')  && session('logged_in')) {
open FH, "<", "./scripts/test.out";
my $msg = <FH>;
close FH;
chdir ("./scripts");
system("call sth"); #call external programs to generate a "test.png"
my $err;
copy ("test.png", "../public/images/test.png") || ($err = "cannot copy"); #copy the "test.png" to public/images directory, so the 
my $img = "test.png";
template 'analysis',{msg => $msg, img => $img, err => $err};
}
else {
return redirect '/'
}

};

然而,我可以作为独立应用程序或使用plackup/starman成功启动此应用程序。但是我不能用CGI来部署它。我使用danger的文档完成了关于cgi部署的每一步。我可以成功地使用cgi来启动dancer的示例应用程序。但当我试图如上所述推出我自己的产品时,我总是得到错误:

应用程序目录'/home/tester/MyApp/bin/..'不可写/可执行,无法在/usr/local/share/perl/5.14.2/Dancer/Logger.pm第16行进行chmod,referr:localhost

这似乎是一个权限问题,但我不知道如何解决。有更好的方法从路由处理程序启动外部程序吗?我应该把这些外部程序存储在哪里,这样当dancer应用程序部署为CGI时,它们就可以由它执行了。

有人能帮我吗?谢谢

晓宽

Dancer::Logger::File文档说明:

可以使用log_path选项指定日志目录。

setting log_path => $dir;

只需在(production.yml)环境文件中添加一行:

log_path: /var/log/dancer/myapp/

并使该路径可写入CCD_ 2。

最新更新