如何使用cgi部署perl舞者应用程序并调用外部脚本?

时间:2013-12-30 05:38:54

标签: perl apache dancer

我有一个使用CGI实现的webapp。它基本上使用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部署它。关于cgi部署我使用舞蹈家的文档做了每一步。我可以成功使用cgi来启动舞者的示例应用程序。但是当我试图像上面那样启动我自己的时候,我总是得到错误:

app目录'/ home / tester / MyApp / bin / ..'不可写/可执行,无法在/usr/local/share/perl/5.14.2/Dancer/Logger.pm行chmod它16,referer:localhost

这似乎是一个权限问题,但我不知道如何修复它。有没有更好的方法从路由处理程序启动外部程序?我应该在哪里存储这些外部程序,因此它们可以由舞者应用程序在部署为CGI时执行。

有人能帮帮我吗?感谢。

小宽

1 个答案:

答案 0 :(得分:0)

Dancer::Logger::File documentation说:

  

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

     setting log_path => $dir;

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

log_path: /var/log/dancer/myapp/

并将此路径写入www-data